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

Create new process in separate function [c]

我想在名为 eg 的特定函数中创建备用进程(子进程?)。无效过程()。我只想创建那个子进程而不对它做任何事情。我只是想让它活着并且什么也不做,而我的应用程序的 main() 将按我的意愿工作。 在我的应用程序的 main() 的某个时刻,我将终止子进程,然后再次重生它。任何想法如何做到这一点?

我有类似的东西,但是当我使用这个函数创建进程时,我得到了两次。就像在启动 process() 之后,每个语句都完成两次,我不想要它。在子部分的 getpid() 之后添加 sleep(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# 中的某种 worker 一样?

假设您在 Linux,这里有一个示例可能会阐明您的观点:parent 进程生成 child,child 调用 pause()它暂停它直到发出信号,最后 parent 使用 SIGKILL 处理 kill 的 child。

#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() returns:

  • <0 失败
  • 0 在 child 过程中
  • child 在 parent 进程中的 pid。