Bash 和后台进程 PGID 和接收信号

Bash 和后台进程 PGID 和接收信号

我的实际问题是,我在 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

相关内容