鲁班建设网站,下载安装百度一下,西安旅游必去景点推荐,升级wordpress另一更新正在进行作业1#xff1a;守护进程
守护进程的创建#xff08;5步#xff09;#xff1a; 创建孤儿进程#xff1a;所有工作都在子进程中执行#xff0c;从形式上脱离终端控制。 fork(), 退出父进程 创建新的会话组#xff1a;使子进程完全独立出来#xff0c;防止兄弟进程对其…作业1守护进程
守护进程的创建5步 创建孤儿进程所有工作都在子进程中执行从形式上脱离终端控制。 fork(), 退出父进程 创建新的会话组使子进程完全独立出来防止兄弟进程对其有影响。 setsid() 函数
功能创建一个新的进程组和会话组成为该进程组和会话组组长;
原型#include sys/types.h#include unistd.hpid_t setsid(void); 修改当前孤儿进程的运行目录为不可卸载的文件系统例如根目录/tmp防止运行目录被删除后导致进程崩溃 chdir函数
功能修改运行目录;#include unistd.hint chdir(const char *path);
chdir(/);注意从当前位置往后运行在指定的目录下 重设文件权限掩码umask(0), 一般清零关闭所有文件描述符从父进程继承过来的文件描述符不会用到浪费资源。 代码 #include stdio.h#include stdlib.h#include sys/types.h#include sys/wait.h#include sys/stat.h#include unistd.hint 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;igetdtablesize();i)close(i);while(1){//守护进程运行的周期性代码sleep(1);}}return 0;}输入ps ajx可查看进程之间的关系输入pidof 文件名 可查看该文件是否有进程在运行可通过 【kill -9 进程的pid号】将这个进程杀死也可通过【killall -9 文件名】将该文件的所有在运行的进程杀死。 作业2打印时钟在终端上若终端输入quit结束时钟
#include stdio.h
#include head.h
#include sys/types.h
#include sys/wait.h
#include time.h
int main(int argc, const char *argv[])
{time_t t0;struct tm* infoNULL;char input[10];int wtatus0;int o0;pid_t cpidfork();if(cpid 0){while(1){t time(NULL);info localtime(t);printf(%d-%02d-%0d %02d:%02d:%02d\r,info-tm_year1900, info-tm_mon1, info-tm_mday,info-tm_hour, info-tm_min, info-tm_sec);fflush(stdout);sleep(1);}_exit(0);}if(cpid 0){while(1){ bzero(input,sizeof(input));fgets(input,sizeof(input),stdin);puts(input);ostrcmp(input,quit\n);if(0 o){kill(cpid,SIGTERM);waitpid(cpid,NULL,0);break;}}}return 0;
}