查看PID 进程是否存在的一个小技巧

在Linux 中判断一个PID 对应的进程是否存在,可以通过如下进行判断

#! /usr/bin/env python

import os

def check_pid(pid):
    try:
        os.kill(pid,0)
    except OSError:
        return False
    else:
        return True

if __name__ == "__main__":
    print check_pid(22467)

如果PID在系统中存在,将返回True , 否则返回False。

为什么向对应的pid 进程发生 0 信号(其实没有这个信号的 。kill -l 可以确认没有这个编号的信号) 能够判断 Pid 对应的进程是否存在呢 ?

在linux 系统中, man 手册帮助了我们。

man 2  kill  截获如下一部分

KILL(2)                                   Linux Programmer's Manual                                  KILL(2)

NAME
       kill - send signal to a process

SYNOPSIS
       #include <sys/types.h>
       #include <signal.h>

       int kill(pid_t pid, int sig);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       kill(): _POSIX_C_SOURCE

DESCRIPTION
       The kill() system call can be used to send any signal to any process group or process.

       If pid is positive, then signal sig is sent to the process with the ID specified by pid.

       If pid equals 0, then sig is sent to every process in the process group of the calling process.

       If  pid  equals -1, then sig is sent to every process for which the calling process has permission to
       send signals, except for process 1 (init), but see below.

       If pid is less than -1, then sig is sent to every process in the process group whose ID is -pid.

       If sig is 0, then no signal is sent, but existence and permission checks are  still  performed;  this
       can be used to check for the existence of a process ID or process group ID that the caller is permit‐
       ted to signal.

       For a process to have permission to send a signal, it must either be privileged  (under  Linux:  have
       the  CAP_KILL  capability in the user namespace of the target process), or the real or effective user
       ID of the sending process must equal the real or saved set-user-ID of the  target  process.   In  the
       case  of  SIGCONT,  it  suffices when the sending and receiving processes belong to the same session.
       (Historically, the rules were different; see NOTES.)

猜你喜欢

转载自blog.csdn.net/qingzhuyuxian/article/details/106200900