bash - 执行 bash 命令组时 `ps --forest` 的解释是什么?
问题描述
根据 bash 手册(https://www.gnu.org/software/bash/manual/html_node/Command-Grouping.html#Command-Grouping):
( list ) 在括号之间放置一个命令列表会导致创建一个子shell环境
{ 列表; 在大括号之间放置一个命令列表会导致该列表在当前 shell 上下文中执行。
现在,我对他们的样子感到困惑ps --forest
。
如果我运行( sleep 10 )
or { 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(虽然() &
应该)?
解决方案
推荐阅读
- javascript - Javascript - 代码重复的比我需要的多
- sql - SQL Server @@rowcount 始终返回 0
- list - 如何访问嵌套列表中的变量并绘制直方图
- android - 数据存储安全
- javascript - 即使成功尝试,也无法在 Firebase 上写入数据
- java - Spring Boot数据休息时间戳解析错误
- c# - .NET Core 2.1 使用 REST API 不返回结果
- python - 如何使用 numpy 解决 mayavi 中的 double_scalars 中遇到的无效值
- ios - Swift 4 - Alamofire 4 上传带参数的图片
- javascript - 使用 var vs let 记录全局变量会产生不同的结果