linux后台进程后台运行和关闭、查看后台任务

目录

一、不挂断的后台运行命令

1.nohup

2.&

3 &和nohup区别

二、查看后台运行命令

1.jobs

2.ps

三 后台程序管理

1 关闭当前后台运行的命令

2 前后台进程的切换与控制

3 示例操作


一、不挂断的后台运行命令

运行.sh文件

直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令。

1.nohup

不挂断的运行命令

如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)

ps -aux | grep "test.sh"  #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分

语法:nohup Command [ Arg … ] [ & ]

nohup ./bin/storm nimbus 

2.&

加在一个命令后,可以把这个命令放在后台运行如gftp &,

例如:

watch  -n 10 sh  test.sh  &  #每10s在后台执行一次test.sh脚本

3 &和nohup区别

command & 是后台运行 Ctrl + C后程序不停止运行,关闭shell会话后或者其他原因导致shell会话退出 程序停止运行

nohup command ,shell会话退出后,程序不停止运行,Ctrl+C程序停止运行

nohup后台运行脚本

nohup ./sh &

这样执行脚本很危险,shell关闭后,jobs发现不了,只能查找pid,利用kill终止

ps

ps aux | grep "./sh"

此时要退出只能使用【kill】命令关掉该进程:

kill -9 进程号
-9:表示kill信号,无法抓取,无法忽略,意思是“城管来了,小摊儿必须撤”

二、查看后台运行命令

1.jobs

查看当前终端后台运行命令 ,终端关闭后无法查看。

jobs -l选项可显示当前终端所有任务的PID,jobs的状态可以是running,stopped,Terminated。

+ 号表示当前任务,- 号表示后一个任务。

2.ps

查看当前的进程。

输出列的含义:

  • F 代表这个程序的旗标 (flag), 4 代表使用者为 super user
  • S 代表这个程序的状态 (STAT)
  • UID 程序被该 UID 所拥有
  • PID 进程的ID
  • PPID 则是其上级父程序的ID
  • C CPU 使用的资源百分比
  • PRI 这个是 Priority (优先执行序) 的缩写
  • NI 这个是 Nice 值
  • ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“
  • SZ 使用掉的内存大小
  • WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作
  • TTY 登入者的终端机位置
  • TIME 使用掉的 CPU 时间。
  • CMD 所下达的指令为何

ps -A: 查看所有进程信息

[root@localhost test6]# ps -A
PID TTY          TIME CMD
1 ?        00:00:00 init
2 ?        00:00:01 migration/0
3 ?        00:00:00 ksoftirqd/0
4 ?        00:00:01 migration/1

ps -u root:查看指定用户信息  

ps -ef:显示所有进程信息,连同命令行

[root@localhost test6]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Nov02 ?        00:00:00 init [3]
root         2     1  0 Nov02 ?        00:00:01 [migration/0]
root         3     1  0 Nov02 ?        00:00:00 [ksoftirqd/0]

ps aux:列出所有目前正在内存中的程序。

[root@localhost test6]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  10368   676 ?        Ss   Nov02   0:00 init [3]
root         2  0.0  0.0      0     0 ?        S<   Nov02   0:01 [migration/0]

三 后台程序管理

1 关闭当前后台运行的命令

 kill命令:结束进程

     (1)通过jobs命令查看jobnum,然后执行   kill %jobnum

     (2)通过ps命令查看进程号PID,然后执行  kill %PID

       如果是前台进程的话,直接执行 Ctrl+c 就可以终止了

2 前后台进程的切换与控制

     (1)fg命令

       功能:将后台中的命令调至前台继续运行

       如果后台中有多个命令,可以先用jobs查看jobnun,然后用 fg %jobnum 将选中的命令调出。

     (2)Ctrl + z 命令

       功能:将一个正在前台执行的命令放到后台,并且处于暂停状态

     (3)bg命令

       功能:将一个在后台暂停的命令,变成在后台继续执行

       如果后台中有多个命令,可以先用jobs查看jobnum,然后用 bg %jobnum 将选中的命令调出继续执行。2

3 示例操作

$ ctrl+z 将当前运行的进程放入后台暂停
$ jobs ##列出后台进程
[1]+  已停止               putty
$ fg %1  #取出后台进程放入前台运行,%后面加进程序号

$ bg %1 ##将程序放入后台,继续执行
[1]+ putty &  ##程序在后台执行
$ kill -9 %1 ##强制杀死后台程序

$ xkill #通过点击鼠标结束相应程序

后台运行,如果不想看到控制台打印日志可以:
./test_nohup -t 2 > ./back_ground.txt 2>&1 &

0:标注输入,1:标准输出,2:标准错误输出

输出重定向到文件


意思标准输出重定向到文件‘back_ground.txt’中,【2>&1】意思是将标准错误输出重定向到标准输出,因为标准错误输出是没有缓冲区的而标准输出有,并且如果实时输出到文件中要【flush】输出缓冲区,否则未达到缓冲区大小时是不会输出到文件的。

如果不需要输出文件,则可以:
./test_nohup -t 2 > /dev/null 2>&1 &

将所有输出重定向到【/dev/null】这个‘空’设备文件,它会丢弃写入的内容,就感觉任何东西都被“宇宙黑洞”吞噬了一样。。。

嗯,是的,你可以跟【nohup】组合。。。
like this...:nohup ./test_nohup -t 2 > /dev/null 2>&1 & ,这样关闭‘窗口’程序依然在后台运行

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值