0

私は Linux C 開発に慣れていません。

私のコード:

....

if((pid=fork())==0){
  //child process
  //start a process, may be need to change execv to other call
  execv (workdir , args);
}else if (pid<0){
  ...
}else{
  ...
}

私がやりたいことは、子プロセスで開始された新しいプロセスからすぐに戻ることです。

現在のプログラムでexecv (workdir , args);は、戻りません。(長時間実行されるプロセスを開始する必要があります)。

私がやりたいことは、この長期実行プロセスを開始し、すぐに C コードに戻って、C プログラムを終了できるようにすることです。

これどうやってするの?開始した新しい子プロセスをデーモンにするかもしれませんが、API 呼び出しでそれを行うにはどうすればよいですか?

4

1 に答える 1

3

このようなもの:

close(0); open("/dev/null", 0);
close(1);

if(open("/dev/null", O_WRONLY) < 0) {
    perror("/dev/null");
    exit(1);
}

switch(pid = fork()) {
    case -1:
        perror(argv[0]);
        exit(1);
        break;
    case 0:
        fflush(stdout);
        close(2); dup(1);
        setpgrp();
        setsid();
        execv(argv[0], argv);
        execvp(argv[0], argv);
        perror(argv[0]);
        _exit(1);
        break;
    default:
        exit(0);
        break;
}

プロセスを fork してデタッチし、終了します。プログラムを「デーモン化」します。

于 2012-05-18T09:19:28.633 に答える