📜  Python| os.WTERMSIG() 方法

📅  最后修改于: 2022-05-13 01:55:33.860000             🧑  作者: Mango

Python| os.WTERMSIG() 方法

Python中的OS 模块提供了与操作系统交互的功能。操作系统属于 Python 的标准实用程序模块。该模块提供了一种使用操作系统相关功能的可移植方式。
Python中的os.WTERMSIG()方法用于获取导致进程退出的信号号。该方法将os.wait()os.system()os.waitpid()方法返回的进程状态码作为参数。

代码 #1:使用os.WTERMSIG()方法

Python3
# Python program to explain os.WTERMSIG() method
 
# importing os and signal module 
import os, signal
 
# Create a child process
# using os.fork() method
pid = os.fork()
 
 
# pid greater than 0
# indicates the parent process
if pid :
     
    # Wait for the completion of
    # the child process and get
    # its pid and
    # exit status indication
    info = os.wait()   
 
    # info is a tuple
    # info[0] represents child's id
    # info[1] represents exit status code
 
    print("\nIn parent process")
     
    # Get the signal number which caused
    # the child process to exit
    sig_num = os.WTERMSIG(info[1])
 
    print("Child process exited due to signal no:", sig_num )
 
    # We can get the signal name
    # corresponding to the signal number
    # in following way
    print("Signal name:", signal.Signals(sig_num).name)
else :
    print("In Child process")
    print("Process ID:", os.getpid())
    print("Hello ! Geeks")
     
    # os.abort() method will
    # generate a SIGABRT signal
    # to the current process
    # and will produce core dump.
    os.abort()


Python3
# Python program to explain os.WTERMSIG() method
 
# importing os and signal module 
import os, signal
 
# Create a child process
# using os.fork() method
pid = os.fork()
 
 
# pid greater than 0
# indicates the parent process
if pid :
     
    # Create one more child
    pid2 = os.fork()
 
    if pid2 :
     
 
        # Wait for the completion of
        # first child process and get
        # its pid and
        # exit status indication
        # using os.waitpid() method
        child1_info = os.waitpid(pid, 0)   
 
        # Wait for the completion of
        # second child process and get
        # its pid and exit status indication
        # using os.waitpid() method
        child2_info = os.waitpid(pid2, 0)   
 
        # os.waitpid() method
        # returns a tuple which
        # represents child's pid
        # and exit status code
 
        print("\nIn parent process")
        # Get the signal number which caused
        # first child process to exit
        sig_num = os.WTERMSIG(child1_info[1])
        if sig_num != 0 :
            print("First child process exited due to signal no:", sig_num )
            print("Signal name:", signal.Signals(sig_num).name)
        else:
            print("First child exited normally")
 
        # Get the signal number which caused
        # second child process to exit
        sig_num = os.WTERMSIG(child2_info[1])
        if sig_num != 0 :
            print("Second child process exited due to signal no:", sig_num )
            print("Signal name:", signal.Signals(sig_num).name)
 
        else:
            print("Second child exited normally")
         
        # sig_num equal to 0 represents
        # that no signal caused
        # the process to exit        
 
    else :
        print("\nIn second child process")
        print("Process id:", os.getpid())
        print("Hey ! there")
        print("Exiting..")
 
else :
    print("In first child process")
    print("Process ID:", os.getpid())
    print("Hello ! Geeks")
     
    # os.abort() method will
    # generate a SIGABRT signal
    # to the current process
    os.abort()


输出:
In Child process
Process ID: 3421
Hello! Geeks

In parent process
Child process exited due to signal no: 6
Signal name: SIGABRT

代码 #2:使用os.WTERMSIG()方法

Python3

# Python program to explain os.WTERMSIG() method
 
# importing os and signal module 
import os, signal
 
# Create a child process
# using os.fork() method
pid = os.fork()
 
 
# pid greater than 0
# indicates the parent process
if pid :
     
    # Create one more child
    pid2 = os.fork()
 
    if pid2 :
     
 
        # Wait for the completion of
        # first child process and get
        # its pid and
        # exit status indication
        # using os.waitpid() method
        child1_info = os.waitpid(pid, 0)   
 
        # Wait for the completion of
        # second child process and get
        # its pid and exit status indication
        # using os.waitpid() method
        child2_info = os.waitpid(pid2, 0)   
 
        # os.waitpid() method
        # returns a tuple which
        # represents child's pid
        # and exit status code
 
        print("\nIn parent process")
        # Get the signal number which caused
        # first child process to exit
        sig_num = os.WTERMSIG(child1_info[1])
        if sig_num != 0 :
            print("First child process exited due to signal no:", sig_num )
            print("Signal name:", signal.Signals(sig_num).name)
        else:
            print("First child exited normally")
 
        # Get the signal number which caused
        # second child process to exit
        sig_num = os.WTERMSIG(child2_info[1])
        if sig_num != 0 :
            print("Second child process exited due to signal no:", sig_num )
            print("Signal name:", signal.Signals(sig_num).name)
 
        else:
            print("Second child exited normally")
         
        # sig_num equal to 0 represents
        # that no signal caused
        # the process to exit        
 
    else :
        print("\nIn second child process")
        print("Process id:", os.getpid())
        print("Hey ! there")
        print("Exiting..")
 
else :
    print("In first child process")
    print("Process ID:", os.getpid())
    print("Hello ! Geeks")
     
    # os.abort() method will
    # generate a SIGABRT signal
    # to the current process
    os.abort()
输出:
In First child process
Process ID: 3752
Hello! Geeks

In second child process
Process id: 3753
Hey! there
Exiting..

In parent process
First child process exited due to signal no: 6
Signal name: SIGABRT
Second child exited normally

参考资料: https://docs。 Python.org/3/library/os.html#os.WTERMSIG