getppid()
函數在 Linux 系統中用于獲取當前進程的父進程 ID(Process ID)。這個函數本身并不提供進程跟蹤的功能。但是,你可以通過 getppid()
函數來追蹤和管理進程。
以下是一個簡單的示例,展示了如何使用 getppid()
函數來追蹤一個進程及其子進程:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
void track_process(int pid) {
printf("Tracking process with PID %d\n", pid);
// 獲取子進程的 PID
pid_t child_pid = fork();
if (child_pid == 0) {
// 子進程
int child_ppid = getppid();
printf("Child process PID %d has parent PID %d\n", getpid(), child_ppid);
// 在子進程中執行一些操作
sleep(5);
printf("Child process %d exiting\n", getpid());
exit(0);
} else if (child_pid > 0) {
// 父進程
int status;
waitpid(child_pid, &status, 0); // 等待子進程結束
printf("Parent process %d received exit status for child %d\n", getpid(), child_pid);
} else {
// fork 失敗
perror("fork");
return;
}
}
int main() {
int main_ppid = getppid();
printf("Main process PID %d has parent PID %d\n", getpid(), main_ppid);
// 追蹤一個子進程
track_process(getpid());
return 0;
}
在這個示例中,我們首先使用 getppid()
函數獲取主進程的父進程 ID。然后,我們創建一個子進程,并在子進程中再次調用 getppid()
函數以獲取其父進程 ID。這樣,我們就可以看到父子進程之間的關系。
注意,這個示例僅用于演示目的。在實際應用中,你可能需要更復雜的進程跟蹤和管理策略,例如使用進程組、信號處理等。