كيفية العودة فورا من عملية الطفل متشعب في لينكس?

StackOverflow https://stackoverflow.com//questions/10649694

  •  11-12-2019
  •  | 
  •  

سؤال

أنا لست فاميلار مع تطوير لينكس ج.

الرمز الخاص بي:

....

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); لن يعود.(أحتاج إلى بدء عملية طويلة الأمد).

ما أريد القيام به هو بدء هذه العملية على المدى الطويل والعودة على الفور في بلدي رمز ج ، بحيث بلدي برنامج ج يمكن الخروج.

كيف يمكنني أن أفعل هذا?ربما جعل بلدي بدأت عملية الطفل الجديد الخفي, كيفية القيام بذلك عن طريق استدعاء أبي?

هل كانت مفيدة؟

المحلول

شيء من هذا القبيل:

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;
}

سوف شوكة وفصل عملية ، والخروج.إنه" يشتم " البرنامج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top