我正在通过SSH (Putty)在Linux机器上工作。我需要让一个进程在夜间运行,因此我认为可以通过在后台启动该进程(在命令末尾使用&号)并将stdout重定向到一个文件来实现这一点。
令我惊讶的是,这行不通。只要我关闭Putty窗口,进程就会停止。
我怎样才能防止这种情况发生?
我正在通过SSH (Putty)在Linux机器上工作。我需要让一个进程在夜间运行,因此我认为可以通过在后台启动该进程(在命令末尾使用&号)并将stdout重定向到一个文件来实现这一点。
令我惊讶的是,这行不通。只要我关闭Putty窗口,进程就会停止。
我怎样才能防止这种情况发生?
当前回答
看看“nohup”程序。
其他回答
我使用屏幕命令。这个链接详细说明了如何做到这一点
https://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/#starting
看看“nohup”程序。
在基于debian的系统上(在远程机器上) 安装:
Sudo apt-get install tmux
用法:
tmux 运行您想要的命令
重命名会话:
按Ctrl+B然后$ 集名称
退出会话:
按Ctrl+B然后D
(这会留下tmux会话)。此时可以退出SSH。
当您需要再次返回/检查它时,启动SSH,并输入
Tmux附加session_name
它将带您回到tmux会话。
对于大多数进程,您可以使用这个旧的Linux命令行技巧进行伪守护:
# ((mycommand &)&)
例如:
# ((sleep 30 &)&)
# exit
然后启动一个新的终端窗口,然后:
# ps aux | grep sleep
将显示睡眠30仍在运行。
您所做的是将该进程作为子进程的子进程启动,当您退出时,通常会触发该进程退出的nohup命令不会级联到子进程,使其成为一个孤儿进程,仍在运行。
我更喜欢这种“设置好就忘记”的方法,不需要处理nohup、screen、tmux、I/o重定向或任何类似的东西。
如果你想同时运行X个应用程序,可以使用xpra和“screen”。