linux关闭一个后台,Linux后台执行的方法 – 关闭、退出不影响
难免会遇到在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后台执行的方法 – 关闭、退出不影响相关推荐
- linux kill一个进程,linux kill命令:(中止一个进程)
1.作用 kill命令用来中止一个进程. 2.格式 kill [ -s signal | -p ] [ -a ] pid - kill -l [ signal ] 3.参数 -s:指定发送的信号. - ...
- linux 创建一个数据库,Linux下手动创建一个数据库
这是自己手动创建一个Oracle数据库的过程. 在Linux下虽然通过dbca也可以创建数据库,但是在某些环境下却是不能使用图形环境,如数据库服务器在机房,并且开放的端口有限制,或者需要批量创建数据库 ...
- linux禁用光驱设备管理器,禁用光驱各种方法关闭教程
为什么要禁用光驱呢,一个是为了数据安全,一个是现在禁止有人未经允许的情况下使用光驱来刻录光盘,当然还有人不需要用到光驱了,想禁用了以免误触光驱,还有一个原因是省点,特别是笔记本电脑,使用电池的时候光驱 ...
- linux 进入一个中文乱码的目录的方法
bash命令:cd `ls | awk 'NR==xxx'` awk命令:获取第xxx行的目录名称,加上NR=表示从第一行开始读的行号取 NR 已经读出的记录数,就是行号,从1开始 用|把ls的结果传 ...
- js关闭一个html页面跳转,js如何关闭当前页面
同样网上找了很多方法,都不行. 然后我再认真理解一下浏览器提示的信息: 不能关闭非当前窗口打开的页面. 网上找到的方法: window.opener = null; window.open(" ...
- linux dd 截文件,Linux使用dd命令快速生成大文件(转)
dd命令可以轻易实现创建指定大小的文件,如 dd if=/dev/zero of=test bs=1M count=1000 会生成一个1000M的test文件,文件内容为全0(因从/dev/zero ...
- ssh远程执行nohup命令不退出
介绍 Linux系统下,使用默认用户root 远程target机器的主目录下有个脚本test.sh,可执行权限,内容只有一条命令:sleep 10 在本地机器上执行 ssh target " ...
- linux screen 命令详解(后台执行linux命令)
一.背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远 ...
- 转:用nohup命令让Linux下程序永远在后台执行
转自:http://www.einit.com/user1/11/archives/2006/3603.html Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾 ...
最新文章
- centos8编译openssl-1.0.2u、openssl-1.1.1k
- 图片爬取数据解析数据持久化
- 7收不到邮件 contact form_如何解决Contact Form 7提示的配置错误
- java 8 new feature_java 8 new feature --- default method
- SQLi-LABS Less-2,联合注入+报错注入
- 系统集成资质 -复习应考 -做题注意事项
- HP已决定将webOS开源
- qlistview 自定义控件_python – QListView中的自定义项
- 人脸识别相关资源大列表
- oracle中ln函数,PLSQL LN用法及代码示例
- 如何把excel中的一行复制成多行
- Ipopt with Metis编译指南
- 空前绝后!PostgresConf.CNPGConf.Asia 2020大会闭幕
- 4.发布帖子,评论帖子
- 计算圆的周长、面积、球 的体积
- cad打开卡死_CAD有时候用着用着就卡死了怎么回事?
- Rk3128 按键驱动
- 关于公司的SVN服务器的一些小事
- java反射与动态代理
- 360对决手机恶意广告