我在远程机器上运行一个很长的 linux 程序,我想停止它,但我的问题是如果我使用 kill 命令,那么程序将退出而不保存结果。通常我完成程序的方法是使用Ctrl+ C,在这种情况下,程序会保存结果,但现在我不在运行会话的机器上,所以我不能按Ctrl+ C。
我的问题是:有没有办法以远程方式做相当于Ctrl+ C?
我在远程机器上运行一个很长的 linux 程序,我想停止它,但我的问题是如果我使用 kill 命令,那么程序将退出而不保存结果。通常我完成程序的方法是使用Ctrl+ C,在这种情况下,程序会保存结果,但现在我不在运行会话的机器上,所以我不能按Ctrl+ C。
我的问题是:有没有办法以远程方式做相当于Ctrl+ C?
尝试:
kill -SIGINT processPIDHere
基本上Ctrl C发送SIGINT
(中断)信号,而 killSIGTERM
默认发送(终止)信号,除非您指定要发送的信号。
ctrl c 只是发送一个 SIGINT 信号,但还有一些其他信号更柔和一些。http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html
我认为您可以使用 kill 命令发送一些其他信号。(有关更多信息,请参阅 man kill )
这是 mongod 的示例
从命令行启动守护进程:
mongod &
然后稍后
kill -SIGINT `pgrep mongod`
如果您控制长时间运行的远程进程,则可以为 SIGTERM 安装一个信号处理程序(参见man signal
和man sigaction
以及有关此主题的许多 SO 问题),以便在死前很好地清理。
这是很常见的事情。
请记住,在您的信号处理程序中,它就像一个中断处理程序,因为您在不破坏程序其余部分的情况下允许您在其中执行的操作非常有限。您可以在这里做的最好的事情是设置 atomic_t "should_quit" 变量。
我正在按照以下方式做
killall -2 <ProgramName>
或者
kill -2 <PID of your process>
我曾经忘记信号的名称。即这里的 SIGINT/SIGKILL,所以我使用的是 killall -2 或 killall -9 之类的数字