C++中如何監(jiān)控進(jìn)程狀態(tài)

c++
小樊
85
2024-08-24 03:18:34

在C++中監(jiān)控進(jìn)程狀態(tài)可以使用操作系統(tǒng)提供的API函數(shù)來(lái)實(shí)現(xiàn)。以下是一種常用的方法:

  1. 使用 <sys/types.h><sys/wait.h> 頭文件中的 waitpid() 函數(shù)來(lái)等待子進(jìn)程狀態(tài)的改變。
#include <sys/types.h>
#include <sys/wait.h>
#include <iostream>

int main() {
    pid_t pid = fork();
    
    if (pid == 0) {
        // 子進(jìn)程邏輯
        sleep(5);
        std::cout << "Child process finished." << std::endl;
    } else if (pid > 0) {
        // 父進(jìn)程邏輯
        int status;
        pid_t child_pid = waitpid(pid, &status, 0);
        
        if (WIFEXITED(status)) {
            std::cout << "Child process exited with status " << WEXITSTATUS(status) << std::endl;
        } else if (WIFSIGNALED(status)) {
            std::cout << "Child process terminated by signal " << WTERMSIG(status) << std::endl;
        } else {
            std::cout << "Child process status unknown." << std::endl;
        }
    } else {
        std::cerr << "Fork failed." << std::endl;
        return 1;
    }

    return 0;
}

在上面的示例中,父進(jìn)程調(diào)用 waitpid() 函數(shù)等待子進(jìn)程的狀態(tài)改變,然后根據(jù)返回的狀態(tài)信息判斷子進(jìn)程的退出狀態(tài)。

需要注意的是,上面的代碼只是簡(jiǎn)單的示例,實(shí)際情況中可能需要根據(jù)具體需求進(jìn)行進(jìn)一步的處理和錯(cuò)誤檢查。

0