在实际的工作中,一般会通过远程连接软件(如:XShell)连接服务器,因此可能会有在脚本或命令执行期间不能中端远程客户端和服务器连接的需求。因为远程客户端一旦和服务器断开连接,所有的操作也就跟着中断,若在某些程序运行期间中断,还会破坏系统数据。所以今天就和大家分享一下后台进程的应用。
创建后台进程的方式
- bg命令
- sh “脚本名称” &
- nohup sh “脚本名称” &
- 利用screen保持会话,然后再执行脚本或命令,即使用screen保持当前会话的状态
下面分别来讲讲这四种方法的具体使用:
bg命令
当你前台执行的脚本一直执行时,你就会无法执行其它的操作,此时可以通过"bg"命令,来将前台正在执行的脚本放入后台执行:
sh “脚本名称” &
通过在执行脚本时,添加"&"就可以让脚本在后台执行:
这样,即使远程客户端与服务器断开连接,"test.sh"这个脚本也会继续执行,不会因为远程客户端的中断而中断执行。
通过"jobs -l"命令可以查看有哪些后台进程:
后台进程创建成功了,若是关闭此后台进程该怎么办呢?有两种方式:
- 第一种:直接使用"kill"命令,将指定的后台进程杀死。这样"test.sh"脚本就会停止执行
- 第二种:使用"fg"命令将后台脚本或任务放到前台来执行,然后通过"ctrl + c"来结束当前执行的脚本或任务
当我使用以上两种方式将前台进程放到后台执行时,会出现一个问题:若执行的脚本有输出,且没有指定数据输出的位置,那么后台进程执行的脚本就会把输出的内容打印到控制端上来。所以脚本中要指定数据输出到的文件
nohup sh “脚本名称” &
nohup命令用于启动一个命令,以便忽略hangup信号并将stdout和stderr附加到一个文件。默认文件为nohup.out或$HOME/nohup.out;这是IBM官网给出的说明,换成人话就是nohup命令可以让前台进程放到后台执行。并将后台执行的进程输出的数据输出到nohup.out文件中。
nohup命令不会执行一个管道或命令列表。可以将管道或列表保存在一个文件中,然后使用sh或bash命令来运行该文件。
利用screen共用终端
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间切换。使用screen命令就相当于重新启动一个SSH连接。
screen命令常用的参数:
$> screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
-A 将所有的视窗都调整为目前终端机的大小。
-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复之前离线的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
创建一个screen作业
创建完作业后,就会直接跳转到screen作业页面。然后可以在screen作业页面执行自己需要长期执行的进程,原来的终端关闭,也不会影响screen作业中的进程。
若是想创建screen作业后不立即跳转到作业终端页面,可以使用"-dm",即"-d"和"-m"参数的结合:
切换screen作业
返回源终端页面
删除screen作业