This is the process group : (
xxxx xxxx xxxx ? 00:00:00 sshd yyyy yyyy yyyy ? 00:00:00 sshd 8713 8713 8713 pts/0 00:00:00 bash 1234 1234 1234 ? 00:00:00 Process 1 5678 1234 1234 ? 00:00:00 openvt 3789 3789 3789 tty4 00:00:00 Python process
The states of the processes are :
Process1 : Ss [Interruptible sleep and session leader]
openvt : S [Interruptible sleep]
python process: Ss+ [Interruptible Sleep and session leader and Foreground running process]
I'm working in terminal /dev/pts0  bash.
When I send
kill 1234, it kills process1 alone but not its child process. so,I have written a function in Process1 that kills its sub processes before exiting itself.
When I call this function using trap as:
trap function_name SIGTERM
kill 1234 or
kill -15 1234 or
kill -s TERM 1234 , the trap function doesn't capture the signal to call the function that I have written.
again, when I remove the trap command from process1 and calling
kill 1234, it kills the procces1.
I think the execution control is on openvt and not on process1 when both are running in background and because of this kill command is not received by the process1.
Now how to make the process1 to receive the kill command ?
PS: the openvt here opens a new virtual terminal to run python process. the command used to do this is:
openvt -f -s -c 4 -w python_process . The -w waits for command to complete.
Note: From linux-journal If a process receives a signal when it is in an interruptible sleep state, for example, waiting for terminal I/O, the kernel will awaken the process to handle the signal. If a process receives a signal when it is in uninterruptible sleep, such as waiting for disk I/O, the kernel defers the signal until the event completes.
The Kill signal that I sent to process1 is in interruptible sleep state (S), but the kernel defers the signal .. Why ?
There is a post based on this, but it is not solved.
update 1: When I kill all the child processes of parent process using the command pkill -TERM -p pid and when I called kill pid, the signal is catched by the trap command.