僵死进程的产生

#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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值