进程概述
具有某种选定任务的程序在一个数据集合上的一次具体执行过程
每一个进程都有一个独立的进程号(Process ID,PID),系统通过调用进程号来调度操控进程
系统的原始进程是systemd 。PID总是1,是系统中第一个启动的进程
一个进程可以产生另一个进程。除了systemd 以外,所有的进程都有父进程
查看进程PS
ps [option] 前面不加-的就是不加
• a 显示所有包括所有终端的进程
• x 显示所有包括不连接终端的进程(如守护进程)
• u 显示进程所有者的信息
• p 显示指定进程ID的信息 后面跟PID
• -e 显示所有进程
• -f 显示进程的父进程
因为-e包含-f,所以-e和-f连用分不清哪个是父进程,所以如果想看父进程,就单独用-f
• -l 以长列表的方式显示信息
• -o 属性,… 显示定制的信息(ps -o tty,pid或者是ps -o tty -o pid)这就是显示顺序
• pid、comm、%cpu、%mem、state、tty…
• pstree可以用来以树状的方式表现进程的父子关系
ps的一般用法是ps aux | grep <包含的字符>
搜索进程ps aux | grep XXX
按预定的模式:pgrep
• pgrep –U root 查看用户root运行的进程的进程号
• pgrep –G redhat 查看组redhat运行的进程的进程号
按确切的程序名称:pidof
• pidof bash
通过管道来搜索(上面的按预定和按确切程序的不常用)
• ps aux | grep XXX 最重要的
ps aux | grep root
控制进程
kill
用于向指定进程号发送特定信号
语法:kill [-signal] <PID>
• kill -l:列出所有可以由kill传递的讯号
• man 7 signal:显示信号的详细列表
• -15,TERM(默认)-整洁终止
默认为15(终结),把这个进程要做的事儿做完再死
• -9,KILL-立即终止
killall
根据进程名来发送选定信号
语法:killall [-signal] <进程名>
比如我yum安装一个软件包的时候给它通过ctrl+z打断了,如果我再敲同样的命令的时候会有如下的提示,告诉我有安装还没退出,当前安装无法开始。需要等它退出才能继续
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: yum
Memory : 97 M RSS (457 MB VSZ)
Started: Sat Jul 6 13:55:48 2019 - 01:44 ago
State : Traced/Stopped, **pid: 13041**
这时可以通过kill掉这个进程来解决这个问题
ps aux | grep yum
可以看到关于yum的进程,我记住一个进程号,比如为15177,
我通过kill -15 15177 杀不死。但是通过kill -9 15177可以杀死。像yum中断这种,它已经中断了,无法再继续完成它的任务后再被杀死,所以-15是杀不死它的,必须要通过-9
❉killall后面还是加-9或-15。但是killall后面加的不是pid,而是进程名
如果有一个进程A,它依赖于B,那么即使杀死B,A还会重新生成B。但一般都不会平白无故杀死一个进程,都是在一个进程严重占用系统资源的时候杀死它
★killall -9 systemd 执行不了,因为执行这个权限是systemd给的,所以不能杀掉这个进程
前台进程与后台进程
进程描述:
默认情况下,一个命令执行后,此指令将独占shell,并拒绝其他输入。我们称之为前台进程。反之,则称为后台进程。比如qq,最小化以后就是后台状态。前台的不一定是运行的,也可能是僵尸。后台的不代表不是运行的
对每一个终端,都允许多个后台进程
对前台/后台进程的控制与调度,被称为任务控制
将一个前台进程放入后台
• <command> & 将一个进程直接丢入后台,在后台还是在运行的
killall -15能杀死
想让控制台能正常写别的命令行就ctrl+d
• ctrl + z:将一个正在运行的前台进程暂时停止,并丢入后台
killall -15杀不死它,只能用killall -9
前台运行的时候可以通过ctrl+z打断,但后台运行的通过ctrl+z打断不了,只能通过kill给它发送结束信号才能结束
后台进程的控制
• jobs 列出系统作业号和名称
• fg [%作业号] 将后台中的命令调至前台继续运行
• bg [%作业号] 将在后台暂停的命令恢复在后台运行
• kill [%作业号] 给对应的作业发送终止信号
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程
nohup <命令> &