在单独的功能中创建新流程[c]

在单独的功能中创建新流程[c],c,process,C,Process,我想在名为void process()的特定函数中创建备用进程(子进程?)。我只想创建这个子进程,不做任何事情。我只想让它活着,什么也不做,而我的应用程序的main()将按照我的意愿工作。 在我的应用程序main()的某个点上,我将杀死子进程,然后重新启动它。有什么办法吗 我有类似的东西,但当我使用这个函数来创建流程时,我得到了所有东西两次。这就像启动process()后,每个语句都要执行两次,我不希望这样。在子部分的getpid()之后添加sleep(100)后,它似乎工作得很好,但我无法消除

我想在名为void process()的特定函数中创建备用进程(子进程?)。我只想创建这个子进程,不做任何事情。我只想让它活着,什么也不做,而我的应用程序的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#?

中的某种工作进程一样假定您在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;
}
#包括
#包括
#包括
int main()
{
pid_t pid;
pid=fork();
如果(pid<0){perror(“fork”);退出(0);}
如果(pid==0){
printf(“已创建子进程,现在将等待信号…\n”);
pause();//等待信号
}
否则{
//在父进程中执行其他一些工作
printf(“从父进程中删除子进程(%ld)”,(长)pid);
kill(pid,SIGKILL);
}
返回0;
}
请注意,
fork()
返回:


  • 您将需要。@iharob-信号是否会创建新进程?否,它将帮助您在需要时终止进程。该进程将使用
    fork()
    创建。好的,但是为什么当我在子节中执行printf时PID等于0,而当我尝试从main()节获取它时PID等于0?您可能会发现posix_spawn更方便。Fork实际上以一种有趣的方式克隆了这个过程;一旦调用成功,两个进程都将从fork调用返回;他们将看到不同的返回值,因此可以确定进程是父进程还是子进程。感谢您的澄清!现在很简单:)