如何解决执行bash命令组时`ps --forest`的解释是什么?
根据bash手册(https://www.gnu.org/software/bash/manual/html_node/Command-Grouping.html#Command-Grouping):
(列表) 将命令列表放在括号之间会导致创建子 shell 环境
{ 列表; } 将命令列表放在大括号之间会导致列表在当前 shell 上下文中执行。
现在,我对它们在 ps --forest
中的样子感到困惑。
如果我运行 ( sleep 10 )
或 { sleep 10; }
,两者都显示为:
myuser 710405 0.0 0.0 14552 7484 pts/2 S 16:18 0:00 | \_ bash
myuser 723783 0.0 0.0 8424 428 pts/2 S+ 16:26 0:00 | \_ sleep 10
似乎在这两种情况下都没有创建子进程。现在,当我在后台运行命令组时,行为有所不同。 (sleep 10) &
仍然看起来:
myuser 710405 0.0 0.0 14552 7484 pts/2 S+ 16:18 0:00 | \_ bash
myuser 725828 0.0 0.0 8424 480 pts/2 S 16:27 0:00 | \_ sleep 10
但是 { sleep 10; } &
现在看起来:
myuser 710405 0.0 0.0 14552 7484 pts/2 S+ 16:18 0:00 | \_ bash
myuser 728247 0.0 0.0 14036 5140 pts/2 S 16:29 0:00 | \_ bash
myuser 728248 0.0 0.0 8424 460 pts/2 S 16:29 0:00 | \_ sleep 10
基于第一个(非背景)观察,子shell 似乎不是作为(新)进程产生的。但是,为什么 {} &
会生成一个,特别是考虑到它不应该产生子外壳(而 () &
应该)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。