对Linux进程的管理是我们经常遇到的,如何查看一个进程的状态?如何把一个后台的进程调至进程执行?如何杀死一个进程…看了本文后,你将会全部掌握!

1. nohup

nohup的用法:

  • 用途:不挂断地运行命令。
  • 语法:nohup Command [ Arg … ] [ & ]
    • 在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下。
    • 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out$HOME为用户主目录)文件中。
    • 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
  • 参数说明:
    • Command:要执行的命令。
    • Arg:一些参数,可以指定输出文件。
    • &:让命令在后台执行,终端退出后命令仍旧执行。

现在,来尝试一下!

创建my.sh文件,文件内容如下:

#!/bin/bash
echo  "hello"
echo  "----------"
sleep  20  #休眠20s
echo  "world"

执行:

[root@layne bashdir]# chmod +x my.sh  # 给my.sh增加执行权限
[root@layne bashdir]# nohup ./my.sh &
[1] 2064  #这个2064就是my.sh进程的id
[root@layne bashdir]# nohup: ignoring input and appending output to `nohup.out' #看到这个信息说明运行成功,再按一下回车即可回到当前shell命令行[root@layne bashdir]# cat nohup.out
hello
----------
[root@layne bashdir]# cat nohup.out #等待20s再次查看
hello
----------
world
[1]+  Done                    nohup ./my.sh

以下命令在后台执行 my.sh 脚本,并重定向输入到 my.log 文件:

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

解释**2>&1** :将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 my.log 文件中。这样无论正确的输出,还是错误的输出都将重定向到my.log文件中。

2. &

&用在一个命令的最后,可以把这个命令放到后台执行,可以输入jobs 查看后台执行的命令。如下所示:

[root@layne bashdir]# sleep 30 & #休眠30s,并放在后台执行
[1] 2156
[root@layne bashdir]# jobs  # 查看后台的进程
[1]+  Running                 sleep 30 &

3. jobs

jobs命令用于查看正在执行的后台进程,但只能看当前终端生效的进程,如果关闭当前终端后,在另一个终端下,jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)。

jobs的选项如下:

-l:显示进程号;
-p:仅任务对应的显示进程号;
-n:显示任务状态的变化;
-r:仅输出运行状态(running)的任务;
-s:仅输出停止状态(stoped)的任务。

jobs命令一般和-l搭配使用,可以显示后台执行进程的进程号。

这里介绍一些常见的快捷键和进程命令:

  • ctrl+c 停止当前正在执行的进程,相当于直接kill掉。
  • ctrl+z 将当前正在执行的进程放到后台,并且暂停执行,此时进程处于stop状态。
  • fg 将后台中的进程调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumbe将选中的命令调出,%jobnumber是通过jobs命令查到的后台任务的编号,不是进程的pid号。
  • bg 将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

我们首先看看jobs -l输出的信息:

[root@layne bashdir]# sleep 30 &
[2] 2157
[1]   Done                    sleep 30
[root@layne bashdir]# jobs -l
[2]+  2157 Running                 sleep 30 &

上面jobs -l输出4列信息,第一列表示任务编号(jobnumber),第二列表示任务所对应的进程号(pid),第三列表示任务的运行状态,第四列表示启动任务的命令。

现在,我们多启动几个后台进程,让它们处于不同的状态,并用fgbg命令调用它们到前台执行:

[root@layne bashdir]# sleep 60  #执行后,按下ctrl+z将该进程放置后台,并暂定执行
^Z
[1]+  Stopped                 sleep 60
[root@layne bashdir]# sleep 40 &   # 让该进程放到后台执行
[2] 2159
[root@layne bashdir]# nohup ./my.sh &
[3] 2160
[root@layne bashdir]# nohup: ignoring input and appending output to `nohup.out'[root@layne bashdir]# jobs -l
[1]+  2158 Stopped                 sleep 60
[2]   2159 Running                 sleep 40 &
[3]-  2160 Running                 nohup ./my.sh &
[root@layne bashdir]# fg  # 等待60s,可以看到另外两个进程也执行完了,如果这里使用fg 2,则将任务号为2的进程调至前台执行
sleep 60
[2]   Done                    sleep 40
[3]-  Done                    nohup ./my.sh

从上述执行过程会发现,输入jobs -l后,任务号(jobnumber)后面有 +- 两个标志,其中,+ 代表我们输入fg或bg的时候,将该进程调至前台执行。当我们把带有+的进程调至前台执行后,-标志的进程就自动变成+了,下次我们再执行fg或bg,就会调用-变为+的那个进程了。

这里不用纠结 fgbg 的区别,fg是将后台中的进程调至前台继续运行,bg将一个在后台暂停的命令变成继续执行。我在使用过程中,并没有很在意,不过用的最多的还是fg命令。

4. ps

ps命令用于查看当前系统运行的进程信息。

常用选项:

  • a : 显示所有程序
  • x :显示所有程序,不区分终端机
  • u :以用户为主的格式来显示
  • -f 显示程序间的关系
  • -e 显示所有程序

常用组合 :

ps aux 观察系统所有的进程数据

ps -ef 显示所有进程基本信息(比aux较简略一些)

示例:

[root@layne bashdir]# nohup ./my.sh &
[1] 2179
[root@layne bashdir]# nohup: ignoring input and appending output to `nohup.out'[root@layne bashdir]# ps aux | grep my.sh  # 查看包含my.sh进程的信息
root       2179  0.0  0.1 106072  1332 pts/0    S    21:06   0:00 /bin/bash ./my.sh
root       2184  0.0  0.0 103256   872 pts/0    S+   21:07   0:00 grep my.sh
[root@layne bashdir]# ps aux | head -5  # 查看当前系统所有正在执行进程的前5条
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19232  1424 ?        Ss   10:08   0:01 /sbin/init
root          2  0.0  0.0      0     0 ?        S    10:08   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:08   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    10:08   0:00 [ksoftirqd/0]

上述输出的含义:

  • USER:该 process 所属的使用者。
  • PID :该 process 的进程标识符。
  • %CPU:该 process 使用掉的 CPU 资源百分比。
  • %MEM:该 process 所占用的物理内存百分比。
  • VSZ :该 process 使用掉的虚拟内存量 (Kbytes) 。
  • RSS :该 process 占用的物理的内存量 (Kbytes) 。
  • TTY :该 process 是在哪个终端机上面运作,若与终端机无关则显示 ?。另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示为由网络连接进主机的程序
  • STAT:该进程目前的状态,状态显示与ps -l的 S 旗标相同 (R/S/D/T/Z)
  • START:该 process 被触发启动的时间
  • TIME :该 process 实际使用 CPU 运作的时间。
  • COMMAND:该程序的实际命令

5. kill

kill命令用于杀死进程,主要有两个选项:

  • kill -9 pid (见人就杀,不做善后工作)
  • kill -15 pid (调用destory等方法善后)

优先使用 -15选项,因为-15温柔一些,会做一些善后的处理(比如释放所占用的资源),如果使用-15无法杀死进程,再用-9 选项

一般情况下,先用ps命令查找要杀死进程的pid,再用kill命令杀死进程,例如:

[root@layne bashdir]# sleep 30 &
[1] 2194
[root@layne bashdir]# ps -aux | grep sleep
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root       2194  0.0  0.0 100916   620 pts/0    S    21:16   0:00 sleep 30
root       2196  0.0  0.0 103256   864 pts/0    S+   21:16   0:00 grep sleep
[root@layne bashdir]# kill -15 2194

【参考文档】
https://ipcmen.com/jobs
https://www.runoob.com/linux/linux-comm-nohup.html
https://www.linuxprobe.com/linux-nohup.html
https://blog.csdn.net/u011630575/article/details/48288663

Linux进程管理命令:nohup、、jobs、fg、bg、ps、kill相关推荐

  1. 十二 个经典 Linux 进程管理命令介绍

    From:http://blog.chinaunix.net/uid-25681671-id-3201927.html 进程和作业管理命令:http://man.linuxde.net/sub/进程和 ...

  2. linux进程管理命令kill,Linux进程管理命令-kill | IT运维网

    格式:kill -l [signal] -l:显示当前系统可用信号 -l:显示当前系统可用信号 [root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) S ...

  3. linux 进程管理命令详解

    进程调度 Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务.调度程序会被频繁的执行,所以调度程序要尽可能的高效: 2.加强交互性能:在系统相当的负载下,也要保证系统的响应 ...

  4. Linux —进程管理命令

    ps 默认显示与当前终端有关的进程信息 -e 显示系统中所有的进程信息 -f 显示更多的进程属性信息(全格式) -L 显示进程中的线程 ID [pei@localhost Desktop]$ ps P ...

  5. linux进程管理命令实验,实验2Linux进程管理.doc

    实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...

  6. L61.linux命令每日一练 -- 第九章 Linux进程管理命令 -- renice和nohup

    9.9 renice:调整运行中的进程的优先级 9.9.1 命令详解 ​ [命令星级] ★★★☆☆ ​ [功能说明] ​ nice命令常用于修改未运行的程序运行时的优先级,但是对于正在运行的进程,若想 ...

  7. L63.linux命令每日一练 -- 第九章 Linux进程管理命令 -- runlevel、init和service

    9.13 runlevel:输出当前运行级别 9.13.1 命令详解 ​ [命令星级] ★★★★★ ​ [功能说明] ​ runlevel命令用于输出当前Linux系统的运行级别. ​ [语法格式] ...

  8. L60.linux命令每日一练 -- 第九章 Linux进程管理命令 -- top和nice

    9.7 top:实时显示系统中各个进程的资源占有状况 9.7.1 命令详解 ​ [命令星级] ★★★★★ ​ [功能说明] ​ top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个 ...

  9. linux进程管理命令

    一.ps进程查看常用命令: 本文介绍的是UNIX参数风格的命令.在介绍命令的时候我们首先介绍一下输出的参数: UID--->启动这些进程的用户. PID--->进程号 PPID--> ...

  10. L58.linux命令每日一练 -- 第九章 Linux进程管理命令 -- pgrep和kill

    9.3 pgrep:查找匹配条件的进程 9.3.1 命令详解 ​ [命令星级] ★★★★☆ ​ [功能说明] ​ pgrep命令可以查找匹配条件的进程号. ​ [语法格式] pgrep [option ...

最新文章

  1. Java后端线上问题排查常用命令收藏
  2. 每个人都有一个“内外引擎”
  3. Python--练习及面试题
  4. EndDialog和CDialog::OnOK()
  5. 【HDOJ】4358 Boring counting
  6. insert sort
  7. 通用ShellCode深入剖析
  8. Js获取当前日期时间及其它操作(转)
  9. 微信浏览器中IOS12键盘回弹的问题
  10. SAP License:HP面试手记
  11. android短信模板,短信服务 · Android – Bmob后端云
  12. Golang sync.Pool 简介与用法
  13. 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
  14. Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
  15. opencv svm 多分类问题
  16. 教你有效清理C盘空间不足的方法
  17. 微信小程序 如何接入视频激励广告
  18. 酷派S1android版本,酷派S1太烂了?NO!阉割降频版骁龙821依旧给力
  19. Cocos精品《地下城堡2》:从挂机到RPG 唯有暗黑始终如一
  20. JK latch JK触发器 【数字电路】

热门文章

  1. 纳韦斯托克斯方程的推导_这5个改变世界的方程,跟你想的不一样!
  2. java中12个月_C中的12个月日历
  3. sklearn 相似度矩阵_利用sklearn计算文本相似性
  4. mysql查询当前用户中所有的表空间_查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词等)...
  5. easypoi 表头数据导入_小窗通知丨关于金关二期加工贸易导入接口更新的通知
  6. flask web开发是前端还是后端_后端开发该不该学前端开发?
  7. VS2015sql本地服务器为空,详解VS2015自带LocalDB数据库用法实例
  8. 《Think Python》第15章学习笔记
  9. 八款你不得不知的开源前端JS框架
  10. mysql的三种安装方式(详细)