在单独的函数中创建新进程 [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。
我想在名为 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。