昨天睡觉前我开始了一个漫长的过程,我以为它会在我起床之前完成,因此我使用了
./command && sudo poweroff
我的系统配置为不要求输入密码sudo poweroff
,因此该命令完成后它应该关闭。
但是它仍在运行,我现在想使用该系统执行其他任务。在后台运行该命令不是问题,但我的系统可能随时关闭才是问题。
有没有办法阻止zsh
执行poweroff
命令,同时确保第一个命令运行直到完成?
在这种情况下,编辑/etc/sudoers
文件以便系统询问我的密码是否仍然有帮助?
答案1
正如您在评论中澄清的那样,它仍然在交互式 shell 的前台运行,您应该能够按Ctrl+Z。
这将暂停./command
工作。除非./command
实际拦截到SIGTSTP信号并在这种情况下选择exit(0)(不太可能),否则退出状态将为非0(128+SIGTSTP,一般为148),因此sudo poweroff
不会运行。
然后,您可以使用或./command
在前台或后台恢复。fg
bg
您可以使用以下方法进行测试:
sleep 10 && echo poweroff
当您按下并稍后使用/恢复时,请注意poweroff
不会输出。Ctrl+Zfg
bg
或者与
sleep 10 || echo "failed: $?"
failed: 148
一按就可以看到Ctrl+Z。
请注意,这对于zsh
并假设您使用 开始是有效的./command && sudo poweroff
。它可能对其他 shell 无效,并且如果您以其他方式启动它,例如(./command && sudo poweroff)
在子 shell 中或{ ./command && sudo poweroff; }
作为复合命令的一部分(zsh
与大多数其他 shell 相反,它会转换为子 shell,因此可以将其恢复为暂停时是一个整体)。
答案2
您可以暂时重命名 /sbin/poweroff 。
答案3
有没有办法阻止 zsh 执行 poweroff 命令,同时确保第一个命令运行直到完成?
gdb
我认为除非您使用类似编辑正在运行的进程的内存之类的东西,否则这是不可能的。
在这种情况下,编辑 /etc/sudoers 文件以便系统询问我的密码是否仍然有帮助?
应该有帮助。