📌  相关文章
📜  进程的 pid - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:12:20.088000             🧑  作者: Mango

进程的 PID - C 编程语言

在操作系统中,PID(进程标识符)是一个唯一的整数,它用于标识一个正在运行的进程。在 C 编程语言中,可以通过使用系统调用来获取当前进程的 PID。

获取当前进程的 PID

要获取当前进程的 PID,可以使用 getpid() 函数。此函数位于 unistd.h 头文件中,可通过以下代码调用:

#include <unistd.h>
#include <stdio.h>

int main()
{
    pid_t pid = getpid();
    printf("当前进程的 PID 是 %d\n", pid);
    return 0;
}

以上代码将输出当前进程的 PID。pid_t 是整数类型,它定义了一个完整的范围,因此您可以使用它来保存 pid。

杀死另一个进程

在 C 编程语言中,您也可以通过程序来杀死另一个进程。此操作需要使用 kill() 函数,它位于 signal.h 头文件中。以下是一些示例代码,说明如何用 C 来杀死一个进程:

#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    pid_t pid = fork();
    
    if (pid < 0) // fork() 函数返回负值表示失败
    {
        perror("fork 失败");
        exit(1);
    }
    else if (pid == 0) // 子进程
    {
        printf("子进程启动,PID 是 %d\n", getpid());
        sleep(5);
        printf("子进程结束\n");
        exit(0);
    }
    else // 父进程
    {
        printf("父进程启动,PID 是 %d,子进程 PID 是 %d\n", getpid(), pid);
        sleep(1);
        printf("父进程向子进程发送 SIGKILL 信号\n");
        int result = kill(pid, SIGKILL);
        if (result != 0) // kill() 函数返回值非 0 表示失败
        {
            perror("kill 失败");
            exit(1);
        }
        printf("父进程结束\n");
        exit(0);
    }
}

以上代码将创建两个进程:父进程和子进程。父进程将等待 1 秒钟,然后使用 kill() 函数向子进程发送 SIGKILL 信号。子进程将等待 5 秒钟,然后退出。运行此代码将输出如下:

父进程启动,PID 是 12345,子进程 PID 是 12346
子进程启动,PID 是 12346
父进程向子进程发送 SIGKILL 信号
子进程结束
父进程结束

注意:您只能使用 kill() 函数来杀死子进程或同级进程。如果要杀死其他进程,需要具有足够的权限。