day 5

1.守护进程创建
#include 
int main(int argc, const char *argv[])
{
	//创建孤儿进程
	if(fork()==0)
	{
		//创建新的会话组
		pid_t csid=setsid();
		//文件运行路径改为不可删除的文件下
		chdir("/");
		//修改文件权限掩码umask
		umask(0);
		//关闭所有文件描述符
		for(int i=0;i
int main(int argc, const char *argv[])
{
	printf("if you want to stop,please enter \"quit\"\n");
	pid_t ff = fork();
	if(0==ff)
	{
		//子进程
		//获取quit字符串
		char sign[5] = "";
		//比较字符串是否为quit,不是则重新读取
		while(strcmp(sign,"quit")!=0)
		{
			scanf("%s",sign);
			getchar();
		}
		//是则退出子进程并返回1
		exit(1);
	}
	else if(ff>0)
	{
		//父进程
		while(1)
		{		
			//判断子进程是否已经退出
			int res = -1;
			pid_t ans = waitpid(ff,&res,WNOHANG);
			if(-1==ans)
			{
				printf("recycle son %d failed\n",ff);
			}
			//子进程已退出并结束父进程
			else if(ans>0)	
			{
				if(1==(res>>8))
				{
					exit(0);
				}
			}
			//子进程没有退出,继续输出时间
			time_t curtime = time(NULL);
			struct tm *_curtime = localtime(&curtime);
			printf("%d %02d %02d\t%02d:%02d:%02d\r",(_curtime->tm_year)+1900,(_curtime->tm_mon)+1,\
					_curtime->tm_mday,_curtime->tm_hour,_curtime->tm_min,_curtime->tm_sec);
			fflush(stdout);
			sleep(1);
		}
	}
	return 0;
}

 day 5_第1张图片

 

你可能感兴趣的:(c语言)