91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

linux中Wait函數和waitpid函數怎么用

小億
73
2023-10-22 11:55:31
欄目: 智能運維

在Linux中,wait函數和waitpid函數都是用來等待子進程結束并獲取子進程的終止狀態的。

wait函數的函數原型如下:

#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *status);

wait函數會等待任意一個子進程結束,并將子進程的終止狀態保存在status指向的整型變量中。如果不關心子進程的終止狀態,可以將status設為NULLwait函數返回被終止子進程的進程ID。

示例代碼如下:

#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 == -1) {
        perror("fork");
        exit(1);
    } else if (pid == 0) {
        // 子進程執行的代碼
        printf("Child process\n");
        sleep(3);
        exit(0);
    } else {
        // 父進程執行的代碼
        printf("Parent process\n");
        
        int status;
        pid_t child_pid = wait(&status);
        
        if (WIFEXITED(status)) {
            printf("Child process %d exited normally with status %d\n", child_pid, WEXITSTATUS(status));
        } else {
            printf("Child process %d exited abnormally\n", child_pid);
        }
    }
    
    return 0;
}

輸出結果:

Parent process
Child process
Child process 1234 exited normally with status 0

waitpid函數的函數原型如下:

#include <sys/types.h>
#include <sys/wait.h>

pid_t waitpid(pid_t pid, int *status, int options);

waitpid函數可以指定等待的子進程ID,其中pid參數有以下幾種取值:

  • pid > 0:等待進程ID為pid的子進程;
  • pid = -1:等待任意一個子進程;
  • pid = 0:等待和調用waitpid函數的父進程在同一個進程組的任意子進程;
  • pid < -1:等待進程組ID為-pid的任意子進程。

status參數和wait函數一樣,用來保存子進程的終止狀態。

options參數用來指定額外的選項,比如可以使用WNOHANG選項來非阻塞地等待子進程結束。

示例代碼如下:

#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 == -1) {
        perror("fork");
        exit(1);
    } else if (pid == 0) {
        // 子進程執行的代碼
        printf("Child process\n");
        sleep(3);
        exit(0);
    } else {
        // 父進程執行的代碼
        printf("Parent process\n");
        
        int status;
        pid_t child_pid = waitpid(pid, &status, 0);
        
        if (WIFEXITED(status)) {
            printf("Child process %d exited normally with status %d\n", child_pid, WEXITSTATUS(status));
        } else {
            printf("Child process %d exited abnormally\n", child_pid);
        }
    }
    
    return 0;
}

輸出結果和前面的例子是一樣的。

0
柞水县| 喀喇| 沙雅县| 河西区| 芦溪县| 措美县| 肇东市| 浦城县| 仙居县| 灵丘县| 达日县| 平阴县| 长子县| 新丰县| 朔州市| 大邑县| 鄂托克旗| 兴宁市| 三明市| 宁蒗| 房产| 保康县| 潼南县| 高台县| 阿城市| 武冈市| 尼木县| 陆良县| 泾源县| 资阳市| 南江县| 东阿县| 永新县| 安国市| 报价| 铜川市| 资兴市| 双城市| 区。| 商城县| 介休市|