温馨提示×

Linux getppid函数如何与其他系统调用结合使用

小樊
83
2024-09-29 18:55:14
栏目: 编程语言

getppid() 函数在 Linux 中用于获取当前进程的父进程 ID(Process ID)。这个函数可以与其他系统调用结合使用,以便在一个进程中对另一个进程进行操作或监控。以下是一些示例,展示了如何将 getppid() 与其他系统调用结合使用:

  1. 使用 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;
}
  1. 使用 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;
}
  1. 使用 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() 系统调用结合使用。通过这些组合,您可以在一个进程中创建、监控和控制另一个进程。

0