载风月|关闭终端,程序后台运行,我有5种方法你呢?,Linux运维之

前言我们在使用linux时 , 会经常要把一个程序放到后台运行 , 这时候就需要在程序的最后使用【&】符号 , 但是当直接关闭这个终端时 , 程序就会退出 , 下面我介绍5种方法 , 在关闭终端后程序还继续运行 。
nohup最常用的命令就是【nohup】 , 从名字就看出是否挂起运行命令 , 关闭终端或者退出某个账号 , 进程也继续保持运行状态 , 同样要配合【&】符号一起使用 。
用法:nohupCommand[Arg…][&]
#直接关闭当前终端 , 再打开一个查看
$ps-few|greptest.sh
从上面的可以看出 , 我们运行的test.sh的父进程变成了【PID1】. , 由linux主进程接管 。
setsidnohup是忽略SIGHUP信号 , 有没其他的思路吗?
setip命令可以重新打开了会话 , 继承了父进程组的ID , 脱离了父进程的控制 。 从下图可以看到 , test.sh脚本的父进程已经是init1 , 此时不管关闭还是退出终端 , 已经和后台的程序没有关系了 。
$setsidshtest.sh
exit使用exit命令退出终端 , 我们的程序还是会继续运行 , 这是为什么呢?
这是因为使用exit命令退出终端时不会向终端所属任务发SIGHUP信号 , 是huponexit配置项控制的 , 默认是off , 可以使用shopt命令查看 。
huponexitoff
将huponexit配置成on , 再次使用exit命令退出 , 所属的任务就会跟随退出 。
[root@api~]#shopt-shuponexit
[root@api~]#shopt|grephuponexit
huponexiton
traptrap命令linux内置的命令 , 接收到指定信号时将要采取的行动 , 后是要处理的信号名 , 常见的信号如下:
#!/bin/sh
trap""HUP
whiletrue;do
date>>/root/test.txt
sleep1
done
screenLinuxscreen命令用于多重视窗管理程序 , 它可以创建一个终端 , 让程序在里面运行
screenshtest.sh&
总结至此 , 我们完成了5种linux程序后台运行的方法 , 同样是不需要关心终端是否关闭 , 你还知道哪些linux后台运行程序的方法?