阅读量:0
getppid()
函数在 Linux 中用于获取当前进程的父进程 ID(Process ID)。这个函数可以与其他系统调用结合使用,以便在一个进程中对另一个进程进行操作或监控。以下是一些示例,展示了如何将 getppid()
与其他系统调用结合使用:
- 使用
fork()
创建子进程:
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid = fork(); if (pid == 0) { // 子进程 printf("I am the child process, my parent's PID is %d\n", getppid()); _exit(0); } else if (pid > 0) { // 父进程 printf("I am the parent process, my child's PID is %d\n", pid); wait(NULL); // 等待子进程结束 } else { perror("fork"); return 1; } return 0; }
- 使用
exec()
执行另一个程序,并在新程序中获取父进程 ID:
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> int main() { pid_t pid = fork(); if (pid == 0) { // 子进程 printf("I am the child process, my parent's PID is %d\n", getppid()); execlp("ls", "ls", NULL); // 在子进程中执行 ls 命令 perror("execlp"); return 1; } else if (pid > 0) { // 父进程 printf("I am the parent process, my child's PID is %d\n", pid); wait(NULL); // 等待子进程结束 } else { perror("fork"); return 1; } return 0; }
- 使用
kill()
向父进程发送信号:
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> void signal_handler(int sig) { printf("Received signal %d from parent process\n", sig); } int main() { pid_t pid = fork(); if (pid == 0) { // 子进程 signal(SIGINT, signal_handler); // 设置子进程的信号处理器 printf("I am the child process, my parent's PID is %d\n", getppid()); while (1) { sleep(1); } } else if (pid > 0) { // 父进程 printf("I am the parent process, my child's PID is %d\n", pid); kill(pid, SIGINT); // 向子进程发送 SIGINT 信号(例如,Ctrl+C) wait(NULL); // 等待子进程结束 } else { perror("fork"); return 1; } return 0; }
这些示例展示了如何将 getppid()
与 fork()
、exec()
和 kill()
系统调用结合使用。通过这些组合,您可以在一个进程中创建、监控和控制另一个进程。