如何退出 SSH 会话并保持当前命令行正常运行?

如何退出 SSH 会话并保持当前命令行正常运行?

我有一个正在运行的命令,大约需要 10 天。因为该过程是搜索所有子目录中的文件并转换视频。对于找到的每个视频命令行,系统都会更改进程号。

这是我正在运行的线路:

find . -exec ffmpeg -i {} -vf scale=1280:720 -vcodec libx264 -crf 30 -b:v 300000 {}_250.mp4 \;

如何退出 SSH 会话并保持当前命令行正常运行?

我已经进入第二天了,我担心我的连接会被简单地中断,我会失去所有这些时间。

答案1

netstat --inet --inet6 -lnp | grep :22

你可以找到进程的PID sshd。与

# pstree -p -n 1527
sshd(1527)─┬─sshd(32296)───bash(32298)───screen(32336)
           └─sshd(32723)───bash(32725)───find(32763)───sleep(323)

你可以看到子流程。

如果bash(32725)死了那么它就会find(32763)杀死SIGHUP。这可以通过find在后台运行并使用内置的 shell来防止disown。但是如果sshd(32723)死了,那么其所有子进程及其子进程的控制终端就会消失,因此内核会杀死它们。

您可以暂停shd(32723)bash(32725)。这样,当 SSH 连接断开时,他们就无法终止查找:

kill -stop 32723 32725

下次要提前聪明一点。当您通过网络登录时,几乎没有任何理由不使用screen或登录。tmux

答案2

nohup find . -exec ffmpeg -i {} -vf scale=1280:720 -vcodec libx264 -crf 30 -b:v 300000 {}_250.mp4 \; &

第一次退出时您会收到警告,但如果重复退出,程序应该继续运行 - 除非它需要终端输入。

但我太快了,忽略了你的程序已经在运行了。

相关内容