我们在日常使用脚本中难免会遇到需要一直挂这的脚本,这里就需要用到Linux中如何让脚本后台运行的方法。这里有3种方法供参考。

如何后台运行脚本

方法1:nohup

在执行命令前面加nohup但是CTRL+C就会失效
语法格式:

nohup Command [ Arg … ] [ & ]

参数说明:
Command:要执行的命令。

Arg:一些参数,可以指定输出文件。

&:让命令在后台执行,终端退出后命令仍旧执行。

nohup ping www.baidu.com &

这样就在后台挂上了
查看进程ping

jobs #查看任务

image-20230115145541132

重新进入后台运行的程序

fg "编号"

image-20230115145949266

如果要退出这个界面就直接CTRL+Z

image-20230115150507903

继续执行进程

image-20230115150607604

ps -aux | grep "进程名字也可以是文件"

上面看到的是36640 进程号

Linux.png

ps -aux | grep "文件名"
  • a : 显示所有程序
  • u : 以用户为主的格式来显示
  • x : 显示所有程序,不区分终端机
    杀死进程用kill -9 加进程号
kill -9 36640

Linux后台运行程序-小白菜博客
可以看到已杀死
以下命令在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:

nohup /root/runoob.sh > runoob.log 2>&1 &

2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。

  • 0 – stdin (standard input,标准输入)
  • 1 – stdout (standard output,标准输出)
  • 2 – stderr (standard error,标准错误输出)

方法2:setsid

查看进程可以看到分支

pstree

它可以把自己换成一个父进程

方法3:screen

安装screen:

安装screen
#centos系统安装命令
yun install screen
#Debian/Ubuntu安装命令
apt-get install screen

他是一个终端模拟器
创建一个进程

screen -dmS "进程名字自己取"

查看会话

screen -list

连接会话

screen -r "会话名称"
查看进程
ps -ef | grep [名字]

kill -9 [PID] //杀死对应PID的进程

1.启动新的screen会话

#创建名为为sillgirl

screen -S sillgril
#然后就可以在里面操作了一个新的终端
./sillgril

2.退出当前screen会话:

按Ctrl+a 再按 d, 即可退出screen, 此时程序仍在后台执行

3.查看当前已有的screen会话:

输入:screen -ls

参考:

⾸先⽤screen -ls查看你想要选的screen:
如果他的状态是Detached的,我们需要输⼊
screen -r <screen的pid>
来进⼊这个screen ,
或者输入
screen -rd <screen的名称>
如果他的状态是Attached的,我们就要输⼊
screen -d <screen的pid>
来使他”Dettached”,
然后再输⼊s
creen -r <screen的pid>
来进⼊这个screen。(必须先detached,否则是进不去的)

4.窗口操作:

Ctrl+a+w: 展示当前会话中的所有窗口;

Ctrl+a+c: 创建新窗口;

Ctrl+a+n: 切换至下一个窗口;

Ctrl+a+p: 切换至上一个窗口;

Ctrl+a+num: 切换至编号为num的窗口;

Ctrl+a+k: 杀死当前窗口;

5. 删除某个会话:

screen -S your_screen_name -X quit
或者
screen -X -S <screen的id> quit

按CTRL+A+D 退出screen  后台还是在运行