[C++ 学习]多进程代码解析

//
// 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把我弄蒙了。

猜你喜欢

转载自blog.csdn.net/weixin_40293999/article/details/132723903