我发现centos7.8在其内核参数中使用“net.ifnames=0”而没有“biosdevname=0”,结果似乎是相同的:我得到了传统的网卡名称,例如eth0。
只是好奇,“net.ifnames=0”和“biosdevname=0”有什么区别?
让我惊讶的是,至少从 Bash 4.4.19 开始,Interactive Bash 在单独的会话中运行命令,运行后请参阅以下进程列表sleep 8888
:
PGID PID PPID
3150071 3150071 252603 -bash
3194323 3194323 3150071 sleep 8888
Run Code Online (Sandbox Code Playgroud)
您可以看到PGID
ofsleep
不等于 bash,而其 PPID 等于。
测试在 Ubuntu Bionic 上完成。
有关于这种行为改变的任何文档吗?或者从一开始就一直如此?
在单独的会话中运行命令意味着 bash 退出时根本不会发生 SIGHUP 效果,也许这就是为什么https://www.sobyte.net/post/2022-04/linux-nohup-setsid-disown/#about -说
事实上,在较新版本的 bash 上,bash 不会向后台程序发送 SIGHUP 命令。这意味着任何在后台运行的以 & 结尾的进程都不会被终端退出的 SIGHUP 信号退出。
编辑:我应该使用术语“进程组”而不是“会话”。
我经常用来tee /proc/self/fd/2
向 stdout 和 stderr 显示一些内容,捕获 stdout,同时仍将所有输出保留到 stderr。
例如,我有一个do.sh
:
STD_OUT_STR=$(CMD ARGS ... 2>&1 | tee /proc/self/fd/2)
# handle STD_OUT_STR ...
...
Run Code Online (Sandbox Code Playgroud)
这效果非常好。
例如,
./do.sh
Run Code Online (Sandbox Code Playgroud)
基本上是这样运行的:
bash -c 'echo hi | tee /proc/self/fd/2'
Run Code Online (Sandbox Code Playgroud)
输出
hi
hi
Run Code Online (Sandbox Code Playgroud)
然而,有一天我在 下运行它sudo -u A_USER ./do.sh
,它失败了。
sudo -u A_USER ./do.sh'
Run Code Online (Sandbox Code Playgroud)
其本质上是运行:
sudo -u A_USER bash -c 'echo hi | tee /proc/self/fd/2'
Run Code Online (Sandbox Code Playgroud)
输出
tee: /proc/self/fd/2: Permission denied
hi
Run Code Online (Sandbox Code Playgroud)
到目前为止,我必须遵循以下解决方法:
sudo -u A_USER bash -c 'echo hi | tee >(cat >&2)'
Run Code Online (Sandbox Code Playgroud)
我知道这是出于安全原因:不与其他用户共享当前用户的 …