Python| os.WTERMSIG() 方法
Python中的OS 模块提供了与操作系统交互的功能。操作系统属于 Python 的标准实用程序模块。该模块提供了一种使用操作系统相关功能的可移植方式。
Python中的os.WTERMSIG()方法用于获取导致进程退出的信号号。该方法将os.wait() 、 os.system()或os.waitpid()方法返回的进程状态码作为参数。
Syntax: os.WTERMSIG(status)
Parameters:
status: This parameter takes process status code (an integer value) as returned by os.system(), os.wait() or os.waitpid() method.
Return type: This method returns an integer value which represent the signal number which caused the process to exit.
代码 #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