守护进程
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
//创建孤儿进程
pid_t cpid = fork();
if(0 == cpid)
{
//创建新的会话
pid_t sid = setsid();
printf("sid = %d\n", sid);
//修改运行目录为不可卸载的文件目录下
chdir("/");
//清空文件权限掩码
umask(0);
//关闭所有文件描述符
for(int i = 0; i<getdtablesize(); i++)
close(i);
while(1)
{
//守护进程运行的周期性代码
sleep(1);
}
}
return 0;
}
结果为
打印时钟在终端上,若终端输入quit,结束时钟。
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t pid1=fork();
if(pid1>0)
{
int a;
struct tm* info=NULL;
time_t t;
while(1)
{
pid_t pid2=waitpid(pid1,&a,WNOHANG);
if(a==256)
break;
t=time(NULL);
info=localtime(&t);
printf("%d-%02d-%02d:%02d:%02d:%02d\r",info->tm_year+1900,info->tm_mon+1,\
info->tm_mday,info->tm_hour,info->tm_min,info->tm_sec);
fflush(stdout);
}
}
else if(pid1==0)
{
char a[10];
while(1){
scanf("%s",a);
printf("%s\n",a);
if(strcmp(a,"quit")==0)
break;
}
exit(1);
}
return 0;
}
结果为