#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/* 在父进程中的fork调用返回的是新的子进程的PID
而子进程中的fork调用返回的是0
父子进程可以通过这一点来判断究竟谁是父进程,谁是子进程。
*/
int main()
{
pid_t pid;
char *message;
int n;
printf("fork program starting\n");
pid = fork();
/* 在上一语句调用fork之后,程序被分为两个独立的进程 */
switch(pid)
{
case -1:
perror("fork failed");
exit (1);
case 0:
message = "This is the child";
n = 3;
break;
default:
message = "This is the parent";
n = 5;
break;
}
for (; n > 0; n--)
{
puts(message);
sleep(1);
}
exit (0);
}
查看到僵死进程的结果
ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 3004 2793 0 80 0 - 3979 - pts/1 00:00:00 zsh
0 S 1000 3431 3004 0 85 5 - 579 - pts/1 00:00:00 fork2
1 Z 1000 3433 3431 0 85 5 - 0 - pts/1 00:00:00 fork2 <defunct>
4 R 1000 3450 3004 0 80 0 - 2957 - pts/1 00:00:00 ps