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;
}