我想在特定的函数中创建备用进程(child?),例如。 void process()。我只想创建那个子进程而不做任何事情。我只想活着,什么都不做,而我的应用程序的main()将按我的意愿工作。 在我的应用程序的main()的某些方面,我将杀死子进程,然后再次重新生成它。任何想法如何做到这一点?
我有类似的东西但是当我使用这个功能创建过程时,我得到了两次。就像在启动process()之后,每个语句都完成两次,我不想要它。在孩子部分的getpid()之后添加睡眠(100)似乎工作正常,但我不能杀死它。
int process(int case){
if(case==1){
status=1;
childpid = fork();
if (childpid >= 0) /* fork succeeded */
{
if (childpid == 0) /* fork() returns 0 to the child process */
{
printf("CHILD PID: %d\n", getpid());
}
/* fork() returns new pid to the parent process *//* else
{
}*/
}
else
{
perror("fork");
exit(0);
}
}
else{
if(status!=0){
status=0;
//kill!!!!
system(a); //getting kill -9 PID ; but PID is equal 0 here...
printf("\nkilling child");
}
}
}
如何生成新的子进程并让它存在,就像C#中的某种工作者一样?
答案 0 :(得分:2)
假设您在Linux中,这里有一个示例可能会澄清您的观点:父进程生成一个子进程,子进程调用pause()
暂停它直到发送信号,最后父进程kill
是SIGKILL的孩子。
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid = fork();
if (pid < 0) { perror("fork"); exit(0); }
if (pid == 0) {
printf("Child process created and will now wait for signal...\n");
pause(); //waits for signal
}
else {
//do some other work in parent process here
printf("Killing child (%ld) from parent process!", (long) pid);
kill(pid, SIGKILL);
}
return 0;
}
请注意fork()
返回:
<0
失败0