Linux远程主机在后台运行任务暂停脚本。

背景:工作需要远程控制主机,使其在断开Xshell后一直运行。

关键词:&;,nohup,脚本暂停。

在应用Unix/Linux时,我们通常希望有一个程序在后台运行,所以我们会经常使用& amp;让程序在程序结束时自动运行。

键入Ctrl+C,SIGINT信号,程序会继续运行。

方法1:输入命令:jobs。

方法二:输入命令:ps。

fg、bg、jobs、& amp、nohup、ctrl+z、ctrl+c命令。

在一个命令的结尾,你可以把这个命令放在后台,比如

可以把前台正在执行的命令放到后台,处于暂停状态。

查看当前有多少命令正在后台运行。

jobs -l选项可以显示所有任务的PID,作业的状态可以是正在运行、已停止、已终止。但是,如果任务是kill,shell将从当前shell环境已知的列表中删除该任务的进程标识符。

将后台的命令转移到前台继续运行。如果后台有多个命令,可以用fg %jobnumber(命令号,不是进程号)调出选中的命令。

更改在后台暂停的命令,以便在后台继续执行。如果后台有多个命令,可以使用bg %jobnumber调出选中的命令。

方法1:通过jobs命令检查作业号(假设num),然后执行kill %num。

方法二:通过ps命令检查作业的进程号(pid,假设PID),然后执行kill pid。

前台进程的终止:Ctrl+c

如果程序总是在后台执行,那么即使当前终端关闭也会执行(previous & amp;做不到),这个时候就需要nohup了。此命令可以在您注销帐户/关闭终端后继续运行相应的进程。

中断关闭后,jobs无法再在另一个终端上看到后台运行的程序,所以此时使用ps(进程视图命令)。

如上图所示:

Nohup和& amp;结合后台运行程序。

可以输出到out.log来保存程序输出,也可以输出到/dev/null,即一个空设备而不保存输出。

无论在nohup.out还是test.out中,都无法看到以上三种方式的数据结果,因为python执行已经缓存了输出。

解决

新界面访问查看器

使用后台运行程序:

结果将输出到终端。

用Ctrl+C发送SIGINT信号,程序免疫。

关闭会话发送SIGHUP信号,程序关闭。

使用nohup运行程序:

默认情况下,结果将输出到nohup.out。

用Ctrl+C发送SIGINT信号,程序关闭。

关闭会话发送SIGHUP信号,程序就免疫了。

Nohup和& amp;合作启动程序:

同时对SIGINT和SIGHUP信号免疫

同时,还有一个最佳实践:

不要将信息输出到终端标准输出或标准错误输出,而是使用日志组件将信息记录在日志中。

Nohup和& amp;有什么区别?