难免会遇到在Linux,后台执行任务。下面,总结了一下关闭窗口任然在后台执行的方法,例如:

#执行一个打包命令

[root@elk.todocker.cn ~]# tar czf /data/backup.tgz /data/backup

1. 采用&

tar czf /data/backup.tgz /data/backup &

ctrl+d #退出 才可以, 如果直接关闭窗口,进程任然会被关闭

使用了&,需要用ctrl+d退出才可以;如果是直接关闭了secureCRT是会导致任务推出

jobs -l 可以查看到

对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行。

但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。

例子:

[root@elk.todocker.cn ~]# ping elk.todocker.cn >>/tmp/ping.log &

[1] 9483

[root@elk.todocker.cn ~]# jobs -l

[1]+ 9534 Running ping elk.todocker.cn >> /tmp/ping.log &

[root@elk.todocker.cn ~]# fg

ping elk.todocker.cn >> /tmp/ping.log

^Z

[1]+ Stopped ping elk.todocker.cn >> /tmp/ping.log

[root@elk.todocker.cn ~]# bg

[1]+ ping elk.todocker.cn >> /tmp/ping.log &

2. 采用nohup

nohup tar czf /data/backup.tgz /data/backup

ctrl+z #挂起到后台

bg #后台执行 可以先通过jobs 查看当前有多少job

ctrl+d #或者 关闭窗口 进程任然会在后台执行

例子:

[root@elk.todocker.cn ~]# nohup ping elk.todocker.cn

nohup: ignoring input and appending output to ‘nohup.out’

^Z

[1]+ Stopped nohup ping elk.todocker.cn

[root@elk.todocker.cn ~]# jobs -l

[1]+ 9790 Stopped nohup ping elk.todocker.cn

[root@elk.todocker.cn ~]# bg

[1]+ nohup ping elk.todocker.cn &

[root@elk.todocker.cn ~]# jobs -l

[1]+ 9790 Running nohup ping elk.todocker.cn &

[root@elk.todocker.cn ~]# ps -ef|grep elk.todocker.c[n]

root 9790 9446 0 23:19 pts/1 00:00:00 ping elk.todocker.cn

[root@elk.todocker.cn ~]# fg

nohup ping elk.todocker.cn

^C[root@elk.todocker.cn ~]# ps -ef|grep elk.todocker.c[n]

[root@elk.todocker.cn ~]#

3.采用nohup + &

nohup tar czf /data/backup.tgz /data/backup &

ctrl+d 或者 关闭窗口 进程任然会在后台执行

例子:

[root@elk.todocker.cn ~]# nohup ping elk.todocker.cn &

[1] 9694

nohup: ignoring input and appending output to ‘nohup.out’

[root@elk.todocker.cn ~]# jobs -l

[1]+ 9694 Running nohup ping elk.todocker.cn &

[root@elk.todocker.cn ~]# ps -ef|grep elk.todocker.cn

root 9694 9446 0 23:18 pts/1 00:00:00 ping elk.todocker.cn

root 9747 9446 0 23:19 pts/1 00:00:00 grep --color=auto elk.todocker.cn

而我通常的使用方式为:

nohup ./filename.sh > filename.log 2>&1 &

三点理由:

1)nohup保障进程不会被hangup信号异常中断;

2)将任务放置到后台运行,不占用当前的终端;

3)将错误输出也打印到log中,默认>只有标准输出,错误输出没有。

4.采用(command &)

(tar czf /data/backup.tgz /data/backup &) #父进程设为init进程(进程号为1)会将ppid设置为1,而非当前会话的id,并且jobs查看不到当前的作业。注意这里的括号即是这个方法的重点。

ctrl+d #或者 关闭窗口 进程任然会在后台执行

例子:

[root@elk.todocker.cn ~]# (ping elk.todocker.cn >/tmp/ping.log &)

[root@elk.todocker.cn ~]# jobs -l

[root@elk.todocker.cn ~]# ps -ef|grep elk.todocker.c[n]

root 9959 1 0 23:23 pts/1 00:00:00 ping elk.todocker.cn

[root@elk.todocker.cn ~]#

5.采用setsid run a program in a new session

setsid tar czf /data/backup.tgz /data/backup #会将ppid设置为1,而非当前会话的id

ctrl+d #或者 关闭窗口 进程任然会在后台执行 ,在一个新的会话中运行命令,从而可以避开当前终端发出的HUP信号。

使用方法:setsid COMMAND [ARG]..

例子:

[root@elk.todocker.cn ~]# setsid ping elk.todocker.cn >/tmp/ping.log

[root@elk.todocker.cn ~]# jobs -l

[root@elk.todocker.cn ~]# ps -ef|grep elk.todocker.c[n]

root 9959 1 0 23:23 pts/1 00:00:00 ping elk.todocker.cn

root 10048 1 0 23:24 ? 00:00:00 ping elk.todocker.cn

6.采用disown

tar czf /data/backup.tgz /data/backup

ctrl+z

jobs

bg %N

disown -h %N #N即为job的id disown 可以配合 &使用,效果更好,因为 CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg jobspec来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。

disown -rh -a xxx #-a所有 -r所有 -h忽略hup

disown 命令需要安装。

亡羊补牢,为没有使用nohup与setsid的进程加上忽略HUP信号的功能。

使用方法:

将当前正在前台运行的进程放到后台运行;

然后执行disown -h %{jobid} //这里的{jobid}是通过jobs命令中看到的进程前[]中的数字。

7.采用screen

screen

tar czf /data/backup.tgz /data/backup

ctrl+a d #不可以直接ctrl+d 这样会ternimate screen

例子:

[root@elk.todocker.cn ~]# screen;ping elk.todocker.cn >/tmp/ping.log

-bash: screen: command not found

^C[root@elk.todocker.cn ~]# which screen

/usr/bin/which: no screen in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

需要安装 screen 命令。

用screen -dmS session name来建立一个处于断开模式下的会话(并指定其会话名)。

用screen -list 来列出所有会话。

用screen -r session name来重新连接指定会话。 screen -x session_name(id) 连接attached会话

用快捷键CTRL-a d 来暂时断开当前会话。

通过screen来实现稳定的后台运行

screen是建立一个新的全屏虚拟会话终端,这个会话只有在手动输入exit的时候才会退出,在这个会话里执行的命令不用担心HUP信号会对我们的进程造成影响,因此也不用给每个命令前都加上“nohup”或“setsid”了,非常适合我们有规划的执行大量的后台任务,可以非常方便的让我们对这些后台任务进行管理。

使用方法:

screen //立即创建并进入一个会话。

screen -dmS {name} //建立一个处于断开模式下的会话,并根据我们的需要指定其会话名称。

screen -list //列出所有会话。

screen -r {name} //进入指定会话。

ctrl +ad //输入快捷键ctrl +a和d,可暂时退出当前会话。

exit //进入指定会话后执行exit即可关闭该会话。

赞赏

linux关闭一个后台,Linux后台执行的方法 – 关闭、退出不影响相关推荐

  1. linux kill一个进程,linux kill命令:(中止一个进程)

    1.作用 kill命令用来中止一个进程. 2.格式 kill [ -s signal | -p ] [ -a ] pid - kill -l [ signal ] 3.参数 -s:指定发送的信号. - ...

  2. linux 创建一个数据库,Linux下手动创建一个数据库

    这是自己手动创建一个Oracle数据库的过程. 在Linux下虽然通过dbca也可以创建数据库,但是在某些环境下却是不能使用图形环境,如数据库服务器在机房,并且开放的端口有限制,或者需要批量创建数据库 ...

  3. linux禁用光驱设备管理器,禁用光驱各种方法关闭教程

    为什么要禁用光驱呢,一个是为了数据安全,一个是现在禁止有人未经允许的情况下使用光驱来刻录光盘,当然还有人不需要用到光驱了,想禁用了以免误触光驱,还有一个原因是省点,特别是笔记本电脑,使用电池的时候光驱 ...

  4. linux 进入一个中文乱码的目录的方法

    bash命令:cd `ls | awk 'NR==xxx'` awk命令:获取第xxx行的目录名称,加上NR=表示从第一行开始读的行号取 NR 已经读出的记录数,就是行号,从1开始 用|把ls的结果传 ...

  5. js关闭一个html页面跳转,js如何关闭当前页面

    同样网上找了很多方法,都不行. 然后我再认真理解一下浏览器提示的信息: 不能关闭非当前窗口打开的页面. 网上找到的方法: window.opener = null; window.open(" ...

  6. linux dd 截文件,Linux使用dd命令快速生成大文件(转)

    dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...

  7. ssh远程执行nohup命令不退出

    介绍 Linux系统下,使用默认用户root 远程target机器的主目录下有个脚本test.sh,可执行权限,内容只有一条命令:sleep 10 在本地机器上执行 ssh target " ...

  8. linux screen 命令详解(后台执行linux命令)

    一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...

  9. 转:用nohup命令让Linux下程序永远在后台执行

    转自:http://www.einit.com/user1/11/archives/2006/3603.html Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾 ...

最新文章

  1. centos8编译openssl-1.0.2u、openssl-1.1.1k
  2. 图片爬取数据解析数据持久化
  3. 7收不到邮件 contact form_如何解决Contact Form 7提示的配置错误
  4. java 8 new feature_java 8 new feature --- default method
  5. SQLi-LABS Less-2,联合注入+报错注入
  6. 系统集成资质 -复习应考 -做题注意事项
  7. HP已决定将webOS开源
  8. qlistview 自定义控件_python – QListView中的自定义项
  9. 人脸识别相关资源大列表
  10. oracle中ln函数,PLSQL LN用法及代码示例
  11. 如何把excel中的一行复制成多行
  12. Ipopt with Metis编译指南
  13. 空前绝后!PostgresConf.CNPGConf.Asia 2020大会闭幕
  14. 4.发布帖子,评论帖子
  15. 计算圆的周长、面积、球 的体积
  16. cad打开卡死_CAD有时候用着用着就卡死了怎么回事?
  17. Rk3128 按键驱动
  18. 关于公司的SVN服务器的一些小事
  19. java反射与动态代理
  20. 360对决手机恶意广告

热门文章

  1. iOS仿写计算器中缀转后缀 表达式求值
  2. 类和对象(中)——构造函数介绍
  3. hardmard积 用什么符号表示_矩阵的Hadamard积与符号模式
  4. 轻量化实时语义分割LiteSeg——从算法原理到模型训练与部署
  5. [原创]汇编初学者问题合集
  6. 图像增强 imgaug
  7. 生成树协议 STP RSTP PVST PVST+ 学习记录
  8. Java将String字符串里的每个字符都分割取出来
  9. k8s如何访问 pod 元数据
  10. 锅炉结垢不停炉不停工在线除垢技术与7种化学清洗水垢方法优势对比