我有一个正在运行的命令,大约需要 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 \; &
第一次退出时您会收到警告,但如果重复退出,程序应该继续运行 - 除非它需要终端输入。
但我太快了,忽略了你的程序已经在运行了。