在单独的功能中创建新流程[c]
我想在名为void process()的特定函数中创建备用进程(子进程?)。我只想创建这个子进程,不做任何事情。我只想让它活着,什么也不做,而我的应用程序的main()将按照我的意愿工作。 在我的应用程序main()的某个点上,我将杀死子进程,然后重新启动它。有什么办法吗 我有类似的东西,但当我使用这个函数来创建流程时,我得到了所有东西两次。这就像启动process()后,每个语句都要执行两次,我不希望这样。在子部分的getpid()之后添加sleep(100)后,它似乎工作得很好,但我无法消除它在单独的功能中创建新流程[c],c,process,C,Process,我想在名为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-信号是否会创建新进程?否,它将帮助您在需要时终止进程。该进程将使用
创建。好的,但是为什么当我在子节中执行printf时PID等于0,而当我尝试从main()节获取它时PID等于0?您可能会发现posix_spawn更方便。Fork实际上以一种有趣的方式克隆了这个过程;一旦调用成功,两个进程都将从fork调用返回;他们将看到不同的返回值,因此可以确定进程是父进程还是子进程。感谢您的澄清!现在很简单:)fork()