suspend
是 Bash 中的内置命令。您什么时候会自然地使用此命令并发现它很有用?
答案1
假设您缺少 GNUscreen
和tmux
(以及 X11,和虚拟控制台)但想要在登录 shell 和另一个交互式 shell 之间切换。
您将首先登录控制台,然后启动一个新 shell,暂时阻止登录 shell。要让登录 shell 返回并在那里做一些工作,您需要执行suspend
.然后,您fg
将返回交互式 shell,以继续您在那里所做的任何事情。
事实上,通过作业控制,登录 shell 可以生成许多交互式 shell 作为后台作业,您可以使用 等切换到这些作业fg %1
,但要返回登录 shell,除非您想手动,否则fg %2
需要使用。suspend
kill -s STOP $$
另请注意,交互式 shell 中提示符处的Ctrl+Z不会暂停它。
编辑:我最初有一个关于在脚本中使用的很长的假设部分suspend
,但由于该命令需要作业控制,并且非交互式 shell 通常没有作业控制,所以我删除了该部分。
删除的部分suspend
替换为kill -s STOP $$
(这确实不再属于答案,但无论如何其他人可能会感兴趣):
假设您的脚本中有一个后台进程(脚本),并且该后台进程在某个阶段需要停止并等待父进程告诉它继续运行。这可能是为了让父母有时间提取文件并将其移动到位或类似的事情。
子脚本将暂停 ( ),当可以继续时,kill -s STOP $$
父脚本将向其发送信号。CONT
它使您有机会在父进程和子进程之间实现某种同步(尽管非常基本,因为父 shell 进程或多或少需要猜测子进程已挂起,尽管这可以通过让子进程来解决)CONT
如果太早接收到该信号,则陷阱并且不会暂停)。