产生一个独立的孩子

| 您如何使用C来产生一个独立于其业务的子进程而无需考虑父亲? 我想产生几个流程,在创建它们后不久,它们将在进入工作之前入睡约2分钟。 但是,我不希望父亲等到孩子完成后再做,因为与此同时,我想产生更多的过程。 我在Linux上。     
已邀请:
使用fork()。 fork()系统调用
pid_t pid = fork (); 
if (pid < 0) 
  // Error
else if (pid == 0) 
  // Child Process
  // Sleep 2 min. ?!
else 
  // Code for Father
    
只需使用
fork(2)
生成所需数量的进程,然后在父进程中调用
exit()
。孤儿将通过“ 3”程序被收养。     
如果要创建的子进程在创建后立即完成自己的“自己的业务”,则应使用
vfork()
(用于创建新进程而不完全复制父进程的地址空间)和
exec()
系列来替换子进程随心所欲地处理图像。 如果您不希望父亲等到孩子完成学业,则应该利用异步信号处理。子进程结束时发送SIGCHLD。因此,您可以将“ 6”放入SIGCHLD的信号处理程序中,而不是父进程中,然后让信号处理程序为子进程收集返回状态。 下面是一个玩具示例:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>

sig_atomic_t child_process_ret_status;

void spawn(char *program,char *argv[]){
    pid_t child_pid=vfork();

    if(child_pid>0){
        printf(\"the parent process pid: %d\\n\",(int)getpid());
        printf(\"the cpid: %d\\n\",(int)child_pid);
        system(\"ping -c 10 www.google.com\");
    }else{
        printf(\"the new process %d is going to execute the new program %s\\n\",(int)getpid(),program);
        execvp(program,argv);
        printf(\"you\'ll never see this if everything goes well.\\n\");
    }
}


void child_process_ret_handle(int sigval){
    if(sigval == SIGCHLD){
        printf(\"SIGCHLD received !\\n\");
        wait(&child_process_ret_status);
    }
}

int main(void){
    signal(SIGCHLD,child_process_ret_handle);
    char *program=\"sleep\";
    char *argv[]={
        \"sleep\",
        \"5\",
        NULL
    };

    spawn(program,argv);
    if(WIFEXITED (child_process_ret_status)){
        printf(\"child process exited successfully with %d\\n\",WEXITSTATUS (child_process_ret_status));
    }else{
        printf(\"the child process exited abnormally\\n\");    
    }

    printf(\"parent process: %d returned!\\n\",getpid());
    return 0;
}
    

要回复问题请先登录注册