Linux进程管理命令:nohup、、jobs、fg、bg、ps、kill
对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),第三列表示任务的运行状态,第四列表示启动任务的命令。
现在,我们多启动几个后台进程,让它们处于不同的状态,并用fg
和bg
命令调用它们到前台执行:
[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,就会调用-
变为+
的那个进程了。
这里不用纠结 fg
和 bg
的区别,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相关推荐
- 十二 个经典 Linux 进程管理命令介绍
From:http://blog.chinaunix.net/uid-25681671-id-3201927.html 进程和作业管理命令:http://man.linuxde.net/sub/进程和 ...
- linux进程管理命令kill,Linux进程管理命令-kill | IT运维网
格式:kill -l [signal] -l:显示当前系统可用信号 -l:显示当前系统可用信号 [root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) S ...
- linux 进程管理命令详解
进程调度 Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务.调度程序会被频繁的执行,所以调度程序要尽可能的高效: 2.加强交互性能:在系统相当的负载下,也要保证系统的响应 ...
- Linux —进程管理命令
ps 默认显示与当前终端有关的进程信息 -e 显示系统中所有的进程信息 -f 显示更多的进程属性信息(全格式) -L 显示进程中的线程 ID [pei@localhost Desktop]$ ps P ...
- linux进程管理命令实验,实验2Linux进程管理.doc
实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...
- L61.linux命令每日一练 -- 第九章 Linux进程管理命令 -- renice和nohup
9.9 renice:调整运行中的进程的优先级 9.9.1 命令详解 [命令星级] ★★★☆☆ [功能说明] nice命令常用于修改未运行的程序运行时的优先级,但是对于正在运行的进程,若想 ...
- L63.linux命令每日一练 -- 第九章 Linux进程管理命令 -- runlevel、init和service
9.13 runlevel:输出当前运行级别 9.13.1 命令详解 [命令星级] ★★★★★ [功能说明] runlevel命令用于输出当前Linux系统的运行级别. [语法格式] ...
- L60.linux命令每日一练 -- 第九章 Linux进程管理命令 -- top和nice
9.7 top:实时显示系统中各个进程的资源占有状况 9.7.1 命令详解 [命令星级] ★★★★★ [功能说明] top命令用于实时地对系统处理器状态进行监控,它能够实时地显示系统中各个 ...
- linux进程管理命令
一.ps进程查看常用命令: 本文介绍的是UNIX参数风格的命令.在介绍命令的时候我们首先介绍一下输出的参数: UID--->启动这些进程的用户. PID--->进程号 PPID--> ...
- L58.linux命令每日一练 -- 第九章 Linux进程管理命令 -- pgrep和kill
9.3 pgrep:查找匹配条件的进程 9.3.1 命令详解 [命令星级] ★★★★☆ [功能说明] pgrep命令可以查找匹配条件的进程号. [语法格式] pgrep [option ...
最新文章
- Java后端线上问题排查常用命令收藏
- 每个人都有一个“内外引擎”
- Python--练习及面试题
- EndDialog和CDialog::OnOK()
- 【HDOJ】4358 Boring counting
- insert sort
- 通用ShellCode深入剖析
- Js获取当前日期时间及其它操作(转)
- 微信浏览器中IOS12键盘回弹的问题
- SAP License:HP面试手记
- android短信模板,短信服务 · Android – Bmob后端云
- Golang sync.Pool 简介与用法
- 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
- Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
- opencv svm 多分类问题
- 教你有效清理C盘空间不足的方法
- 微信小程序 如何接入视频激励广告
- 酷派S1android版本,酷派S1太烂了?NO!阉割降频版骁龙821依旧给力
- Cocos精品《地下城堡2》:从挂机到RPG 唯有暗黑始终如一
- JK latch JK触发器 【数字电路】
热门文章
- 纳韦斯托克斯方程的推导_这5个改变世界的方程,跟你想的不一样!
- java中12个月_C中的12个月日历
- sklearn 相似度矩阵_利用sklearn计算文本相似性
- mysql查询当前用户中所有的表空间_查看Oracle当前用户下的信息(用户,表视图,索引,表空间,同义词等)...
- easypoi 表头数据导入_小窗通知丨关于金关二期加工贸易导入接口更新的通知
- flask web开发是前端还是后端_后端开发该不该学前端开发?
- VS2015sql本地服务器为空,详解VS2015自带LocalDB数据库用法实例
- 《Think Python》第15章学习笔记
- 八款你不得不知的开源前端JS框架
- mysql的三种安装方式(详细)