在 Bash 中使用 suspend 命令的实际示例是什么?

igo*_*gor 12 bash job-control process-management

suspend是 Bash 中的内置命令。你什么时候会自然地使用这个命令并发现它有用?

Kus*_*nda 14

假设您缺少 GNUscreentmux(以及 X11虚拟控制台),但想要在登录 shell 和另一个交互式 shell 之间切换。

您将首先登录控制台,然后启动一个新的 shell,暂时阻止登录 shell。要让登录 shell 回到那里做一些工作,你会做suspend. 然后,您将fg返回交互式 shell 以继续您在那里所做的任何事情。

事实上,通过作业控制,登录 shell 可以产生许多交互式 shell 作为后台作业,您可以切换到fg %1fg %2等等,但是要返回登录 shell,suspend除非您想手动,否则您需要使用kill -s STOP $$

另请注意,交互式 shell 中的提示处的Ctrl+Z不会挂起它。

编辑:我最初有一个很长的关于suspend在脚本中使用的假设部分,但由于该命令需要作业控制并且由于非交互式 shell 通常没有作业控制,我删除了该部分。


删除部分suspend替换为kill -s STOP $$(这确实不再属于答案,但无论如何对其他人可能很有趣):

假设您在脚本中有一个后台进程(一个脚本),并且这个后台进程在某个阶段需要停止并等待父进程告诉它继续。这可能是为了让父级有时间提取文件并将其移动到位或类似的东西。

子脚本会挂起 ( kill -s STOP $$),父脚本会CONT在可以继续时向它发送信号。

它使您有机会在父进程和子进程之间实现某种同步(尽管非常基本,因为父 shell 进程或多或少需要猜测子进程已挂起,尽管这可以通过让子进程解决CONT如果过早接收到该信号,则陷阱而不是挂起)。