Bash和后台处理PGID和接收信号

我的实际问题是,我作为docker run container bash --rcfile rcfile中的rcfile中运行的进程仍然附加到bash会话通过共享PGID,这意味着当我Ctrl-C一个不相关的命令进程收到一个SIGINT

所以,在rc文件里面它只是(nohup command &) ,而不是使用rcfile,我直接在shell中调用它,PGID是不同的,Ctrl-C不会影响。

从那里我推断出于某种原因,bash在执行rcfile时不会执行相同的后台进程

写了一个没有docker的小testing,我看到了PGID的行为。

RCFILE,睡眠和bash共享PGID

 Cobain ~/tmp/testbash$ cat rcfile #!/bin/bash (sleep 10 &) Cobain ~/tmp/testbash$ bash --rcfile rcfile arkaitzj@Cobain:~/tmp/testbash$ ps -o "%p %r %y %x %c" PID PGID TTY TIME COMMAND 2883 2883 pts/0 00:00:06 bash 27911 27911 pts/0 00:00:00 bash 27913 27911 pts/0 00:00:00 sleep 27914 27914 pts/0 00:00:00 ps 

shell中的命令input,PGID不同

 Cobain ~/tmp/testbash$ bash Cobain ~/tmp/testbash$ ( sleep 10 &) Cobain ~/tmp/testbash$ ps -o "%p %r %y %x %c" PID PGID TTY TIME COMMAND 2883 2883 pts/0 00:00:06 bash 27999 27999 pts/0 00:00:00 bash 28127 28126 pts/0 00:00:00 sleep 28132 28132 pts/0 00:00:00 ps 

我不明白这个bash的例子,但是在rcfile的情况下,当我ctrl-C它没有SIGINT的睡眠过程,当它共享的PGID