[linux命令] 如何在用户终端退出后,不挂起或退出用户正在运行的程序

我们经常用ssh连接远程linux服务器进行管理和运行程序等,我们会发现,当我们把终端界面退出后,我们通过这个终端执行的程序,不管是在前台运行,还是已经通过&挂在了后台运行的程序,都会因为在退出终端的过程中,发出的SIGHUP信号而退出,有时候我们希望我们即使是退出了终端,某个程序也需要一直运行下去,那么我们可以采取以下两种方法。

使用tmux

如果我们有服务器的root权限,我们可以安装tmux,命令如:
sudo apt-get install tmux
安装完之后,我们需要在tmux下运行某个程序,比如:

tmux new -s your_envs
./program.out & # 运行某个程序并把它挂在后台,其实不挂在后台也行,不影响我们需要实现的功能
# 这个时候即使是退出了终端,我们的程序仍然在运行着  

接下来即便是你退出了终端,也可以再次回到这个环境,命令如:

tmux a -t your_envs

通过命令tmux ls可以查看已存在的环境。
不过这个要求我们有服务器的root权限,在某些场合我们难以获得,因此我们有另个解决方法。

使用nohup命令

nohup的意思是no hang up也就是不挂起的意思,其后可加任何命令command,使得你退出终端后,这个命令也不会因为SIGHUP信号而挂起。如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。 这个命令详情如[1]:

nohup command > myout.file 2>&1 &   
# 我们程序command的输出如果在不指定特定的out文件的情况下,
# 在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中的,
# 如果我们需要指定特定的文件保存其输出结果,那么如上命令,重定向到`myout.file`中

其中的2>&1看起来比较奇怪,其实意思是是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中,这里的数字表示为:

0 – stdin (standard input),
1 – stdout (standard output),
2 – stderr (standard error)

而命令最后的&就是挂在后台运行的意思。

Updatescreen命令类似于tmux同样可以实现类似的功能。


Reference

[1]. https://www.cnblogs.com/jinxiao-pu/p/9131057.html

posted @ 2019-10-13 17:16  FesianXu  阅读(190)  评论(0编辑  收藏  举报