Max*_*tti 27 shutdown command-line zsh job-control
昨天临睡前,我开始了一个漫长的过程,我认为它在我站起来之前就完成了,所以我使用了
./command && sudo poweroff
Run Code Online (Sandbox Code Playgroud)
我的系统配置为不要求输入密码sudo poweroff,因此在该命令完成后它应该关闭。
但是它仍在运行,我现在想将该系统用于其他任务。让该命令在后台运行不是问题,但让我的系统随时可能关闭才是问题。
有没有办法防止zsh执行poweroff命令,同时确保第一个命令运行直到完成?
/etc/sudoers在这种情况下,编辑文件以便系统询问我的密码是否仍然有帮助?
Sté*_*las 35
正如您在评论中澄清的那样,它仍然在交互式 shell 的前台运行,您应该只需按Ctrl+Z.
这将暂停./command工作。除非./command在这种情况下(不太可能)实际拦截SIGTSTP信号并选择退出(0),否则退出状态将为非0(128+SIGTSTP,一般为148),因此sudo poweroff不会运行。
然后,您可以./command使用fg或恢复前景或背景bg。
您可以使用以下方法进行测试:
sleep 10 && echo poweroff
Run Code Online (Sandbox Code Playgroud)
并看到poweroff当您按下Ctrl+Z并稍后使用fg/恢复时不会输出bg。
或与
sleep 10 || echo "failed: $?"
Run Code Online (Sandbox Code Playgroud)
一failed: 148按就看到了Ctrl+Z。
请注意,这适用于zsh并假设您以./command && sudo poweroff. 它可能对其他外壳无效,如果您以其他方式启动它,例如(./command && sudo poweroff)在子外壳中或{ ./command && sudo poweroff; }作为复合命令的一部分(zsh与大多数其他外壳相反,它会转换为子外壳,因此它可以作为暂停时的一个整体)。