El módulo OS en Python proporciona funciones para interactuar con el sistema operativo. OS viene bajo los módulos de utilidad estándar de Python. Este módulo proporciona una forma portátil de usar la funcionalidad dependiente del sistema operativo.
El método os.WIFSIGNALED() en Python se usa para verificar si un proceso salió debido a alguna señal. Este método toma el código de estado del proceso devuelto por el método os.wait() , os.system() o os.waitpid() como parámetro y devuelve True si el proceso finalizó debido a una señal; de lo contrario, devuelve False.
Sintaxis: os.WIFSIGNALED(estado)
Parámetros:
estado: este parámetro toma el código de estado del proceso (un valor entero) tal como lo devuelve el método os.system(), os.wait() o os.waitpid().
Tipo de devolución: este método devuelve un valor booleano de la clase ‘bool’. Este método devuelve True si el proceso salió debido a una señal; de lo contrario, devuelve False.
Código #1: Uso del método os.WIFSIGNALED()
Python3
# Python program to explain os.WIFSIGNALED() method # importing os module import os # 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") # Check whether the child process # exited due to a signal # using os.WIFSIGNALED() method signaled = os.WIFSIGNALED(info[1]) print("Child process exited due a signal?") print(signaled) 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 os.abort()
In Child process Process ID: 10224 Hello! Geeks In parent process Child process exited due a signal? True
Código #2: Uso del método os.WIFSIGNALED()
Python3
# Python program to explain os.WIFSIGNALED() 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) # Send signal 'SIGKILL' to # second child process # using os.kill() method # and get its pid and # exit status code # using os.waitpid() method os.kill(pid2, signal.SIGKILL) 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") # Check whether the first child # process exited due a signal # using os.WIFSIGNALED() method isSignaled = os.WIFSIGNALED(child1_info[1]) print("First child process exited due to a signal?") print(isSignaled) # Check whether the second child # process exited due a signal # using os.WIFSIGNALED() method isSignaled = os.WIFSIGNALED(child2_info[1]) print("Second child process exited due to a signal?") print(isSignaled) else : print("\nIn second child process") print("Process id:", os.getpid()) print("Hey ! there") while True : print("Waiting for signal..") else : print("In first child process") print("Process ID:", os.getpid()) print("Hello ! Geeks") print("Exiting")
In First child process Process ID: 3752 Hello! Geeks In second child process Process id: 3753 Hey! there Waiting for signal.. Waiting for signal.. Waiting for signal.. Waiting for signal.. Waiting for signal.. In parent process First child process exited due to a signal? False Second child process exited due to a signal? True
Referencias: https://docs.python.org/3/library/os.html#os.WIFSIGNALED