//
// Created by ubuntu on 9/6/23.
//
#include<iostream>
#include<signal.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
int main(int argc, char *argv[]) {
cout << "Using:./procctl timetvl program argv ...\n";
cout << "Example:./procctl 5 /usr/bin/tar zcvf /tmp/tmp.tgz /usr/include\n\n";
cout << "本程序是服务程序的调度程序,周期性启动程序服务或shell脚本。\n";
cout << "注意,本程序不会被kill杀死,但可以用kill -9 强行杀死, \n";
// 关闭信号和IO,本程序不希望被打扰
for (int ii = 0; ii < 64; ++ii) {
signal(ii, SIG_IGN);
//关闭信号和IO
//close(ii);
}
// 生成子进程,父进程推出,让程序运行在后台,由系统1号进程托管。
if(fork()!=0) exit(0);
// 启用SIGCHLD信号,让附近从可以wait子进程退出的状态。
signal(SIGCHLD,SIG_DFL);
char *pargv[argc];
for (int ii=2;ii<argc;ii++)
pargv[ii-2]=argv[ii];
pargv[argc-2]=NULL;
while(true){
if (fork()==0){
cout << "2222------" << getpid() <<"---"<< getppid()<< endl;
execv(argv[2],pargv);
exit(0);
}else{
cout << "1111------" << getpid() <<"---"<< getppid()<< endl;
int status;
wait(&status);
sleep(atoi(argv[1]));
}
}
return 1;
}
两个fork把我弄蒙了。