كيفية العودة فورا من عملية الطفل متشعب في لينكس?
سؤال
أنا لست فاميلار مع تطوير لينكس ج.
الرمز الخاص بي:
....
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;
}
سوف شوكة وفصل عملية ، والخروج.إنه" يشتم " البرنامج.
لا تنتمي إلى StackOverflow