Source code for this tidbit is available at the Linux Tidbits repo here.
We have 2 simple programs, which we shall connect via a pipe on the shell and run. The first one, gen_nums
, generates 2 random numbers every second and prints them on to the console. The other program reads the output of gen_nums
via a pipe is add_nums
. This adds the two numbers and outputs them on to stdout
.
Let’s see how a session looks like:
➜ ./gen_nums | ./add_nums gen_nums: PID: 11063, PGID: 11063 add_nums: PID: 11064, PGID: 11063 166 48 95 ^Cadd_nums got SIGINT. Will exit... get_nums got SIGINT. Will exit...
If you notice carefully, you’d have already seen that gen_num
has the same PID and process group ID. This means that it is the process group leader. You can also see that add_nums
has also been made part of the same process group ID. You can notice that when we hit Ctrl+C, both processes which handle it and exit get the signal.
The thing is that the terminal sends all the processes in the foreground process group ID the signal. That’s how it knows which all processes to send the signal to.
You must be logged in to post a comment.