[英]Creating a child process on Unix systems?
我正在嘗試在另一個進程中創建一個子進程。 我正在用C語言編寫這兩個程序。 首先,我編寫一個虛擬進程,它將是子進程。 它只在屏幕上寫一個字符串。 它本身可以很好地工作。 然后,我編寫另一個程序,它將成為父進程。 但是,我無法實現。 我正在嘗試同時使用fork和execl函數,但是失敗了。 我還希望子進程在父進程終止之前不終止。
我應該如何編寫父流程?
謝謝。
這是子進程的代碼:
#include <stdio.h>
int main(void) {
while(1) {
printf("*");
sleep(1);
}
}
這是父流程:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void) {
if (fork()) {
while(1) {
printf("-\n");
sleep(5);
}
} else {
execl("./", "dummy", (char *)0);
}
}
fork()系統調用可能返回三種不同的狀態:失敗(<0),父進程(> 0)或子進程(== 0)。 您必須正確測試返回值。
int pid = fork();
if (pid < 0) {
/* handle error */
perror("fork");
exit(1);
} else if (pid > 0) {
/* parent code */
} else {
/* child code */
}
您的execl()系統調用是錯誤的。 第一個參數是要執行的程序的路徑,“ ./”無效,至少應為“ ./dummy”。 根據約定,下一個參數是命令名稱(已執行程序中的argv [0]),該名稱可以是第一個參數的重復。 所以:
execl("./dummy", "dummy", NULL);
另外,請注意,子程序中的printf("*")
語句可能會緩沖,並且您在終端上將看不到任何內容。 您必須在末尾添加“ \\ n”或調用fflush(stdout)
刷新標准輸出。
C語言中fork的基本用法
int PID = fork();
if( PID < 0 ) {
//fail
return PID;
}
else if( !PID ) {
//child process
return exec( prog, args );
}
else {
//parent process
return 0;
}
沒有辦法強制子進程完成后“不終止”(您仍然可以在父進程中wait
它來獲取有關其終止方式的信息,僅此而已)。 除此之外,網絡上的fork
/ exec
的許多示例中的任何示例(例如此示例)都應該起作用-為什么不試試它,看看它是否按預期運行(在這種情況下,您只需要改變自己嘗試做的事情的方式)。 如果無法正常工作(除了本A中第一句話的不可能;-),請編輯,以添加有關代碼行為與預期不同的大量細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.