在单独的函数中创建新进程[E]

时间:2015-01-10 17:43:04

标签: c process

我想在特定的函数中创建备用进程(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#中的某种工作者一样?

1 个答案:

答案 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
  • 孩子在父母过程中的pid。