![Bash 和后台进程 PGID 和接收信号](https://linux22.com/image/642121/Bash%20%E5%92%8C%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B%20PGID%20%E5%92%8C%E6%8E%A5%E6%94%B6%E4%BF%A1%E5%8F%B7.png)
我的实际问题是,我在 docker 中的 rcfile 中运行的一个进程通过docker run container bash --rcfile rcfile
共享 PGID 保持连接到 bash 会话,这意味着当我 Ctrl-C 一个不相关的命令时,该进程会收到一个SIGINT
因此,在 rcfile 内部(nohup command &)
,当我不使用 rcfile 而是直接在 shell 中调用它时,PGID 是不同的,并且 Ctrl-C 不会产生影响。
从那里我推断,由于某种原因,bash 在执行 rcfile 时不会在后台执行相同的进程。
编写了一个不使用 docker 的小测试,在其中我可以看到 PGID 行为。
RCFILE、sleep 和 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中输入的命令,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