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

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

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

答案1

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

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

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

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

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


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

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

子脚本将暂停 ( ),当可以继续时,kill -s STOP $$父脚本将向其发送信号。CONT

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

相关内容