中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

Linux的waitpid()函數怎么使用

小億
102
2023-09-05 17:42:54
欄目: 智能運維

waitpid()函數是用來等待子進程結束的函數,其原型如下:

#include <sys/types.h>
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);

參數說明:

  • pid:指定要等待的子進程ID,可以是具體的進程ID,也可以是以下值之一:

  • -1:等待任意子進程結束;

  • 0:等待和調用進程屬于同一個進程組的任意子進程結束;

  • 大于0的值:等待指定進程ID的子進程結束。

  • status:用于存儲子進程的退出狀態信息,如果不關心子進程的退出狀態,可以將該參數設為NULL

  • options:設置等待的選項,常用的選項包括:

  • WUNTRACED:如果子進程進入暫停狀態,則立即返回;

  • WCONTINUED:如果子進程由暫停狀態變為繼續運行狀態,則立即返回;

  • WNOHANG:如果沒有子進程退出或者進入暫停狀態,則立即返回0,而不阻塞等待。

返回值:

  • 如果調用成功,返回子進程的進程ID;

  • 如果調用失敗,返回-1。

下面是一個示例代碼,演示了如何使用waitpid()函數等待子進程結束:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();  // 創建子進程
if (pid < 0) {
perror("fork");
exit(1);
} else if (pid == 0) {
// 子進程執行的代碼
printf("Child process: My PID is %d\n", getpid());
sleep(2);  // 子進程休眠2秒
exit(0);   // 子進程退出
} else {
// 父進程執行的代碼
printf("Parent process: My PID is %d\n", getpid());
int status;
pid_t child_pid = waitpid(pid, &status, 0);  // 等待子進程結束
if (child_pid < 0) {
perror("waitpid");
exit(1);
}
if (WIFEXITED(status)) {
printf("Child process %d exited with status %d\n", child_pid, WEXITSTATUS(status));
}
}
return 0;
}

運行以上代碼,將輸出父進程的PID、子進程的PID以及子進程的退出狀態。

0
东阿县| 顺昌县| 齐河县| 双流县| 革吉县| 延长县| 百色市| 南京市| 南和县| 晋宁县| 梁山县| 阿荣旗| 泸西县| 太仆寺旗| 怀仁县| 万源市| 兴国县| 合川市| 定西市| 德化县| 孟州市| 乌兰县| 香港| 资兴市| 醴陵市| 琼结县| 龙里县| 永兴县| 建阳市| 商都县| 中西区| 洛扎县| 水富县| 嘉兴市| 乌兰浩特市| 鄂尔多斯市| 广宗县| 景洪市| 黑龙江省| 长顺县| 昌江|