[英]Exit a child process after forking
我有這個代碼,它的目標是創建N個子進程並打印出每個PID和進程號。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void childProcess(int num)
{
pid_t pid = fork();
printf("Hello! I am process no. %d! my PID is %d!\n", num, pid);
}
int main()
{
int i = 0;
for(i = 1; i <= 5; i++)
{
childProcess(i);
_exit(3);
}
exit(0);
}
嘗試多種方法后,但是:如exit
VS _exi
T,遞歸的childProcess
, pid = wait()
,我仍然無法順利建立僅5進程。 到目前為止,我的輸出是這樣的代碼:
Hello! I am process no. 1! my PID is 96196!
Hello! I am process no. 1! my PID is 0!
我不確定如何正確退出子進程。 沒有退出代碼就會創建N! 流程。
您正在退出子進程,只是您在錯誤的時間執行此操作。 在fork()之后,每個子進程都保持與父進程相同的循環,創建另一個子進程,這就是為什么你最終擁有它們的原因。
正確的代碼將是這樣的:
for (int i = 0; i < 5; i++) {
if (fork() == 0) {
// child process
printf("I'm child %d, my pid is %d\n", i, getpid());
exit(0);
}
// parent process keeps running the loop
}
fork()
將您的進程拆分為兩個進程,父進程和子進程。 您需要在childProcess()
中對其返回值進行某種測試,以確定您是在父級還是子級中。 如果pid
是0那么你就在孩子身上; 如果非零,那么你在父母。 基於此,您將有條件地退出該計划。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.