目录
什么是进程
进程是指程序运行的过程,进程的管理包括程序的启动,生命周期,运行需要的资源(包括内存资源、运行时候需要的CPU资源),程序的终止(正常终止、异常终止)等。
查看进程状态
ps显示进程
ps //查看当前终端下进程的状态
ps -e //查看其他的进程
ps -ef //显示更多的信息
ps -eLf //显示线程
PID:进程在当前系统中唯一的标识(因为进程的名称是可以重复的)
TTY:当前执行程序的终端
TIME:进程运行的时间(不具有参考价值)
UID:默认进程由哪一个用户启动的(比如root用户启动进程后,可以将UID改为其他用户)
PPID:父进程编号,表示从哪个进程继承一些信息
CMD:加入f后命令显示为全部路径
LWP:轻量级进程(线程)
pstree显示进程
pstree //将进程以树状形式显示
top动态查看进程
查看出来的结果默认为3秒更新一次,可以按s更改更新时间
42min:表示当前系统从最近一次开机到现在运行了42分钟
2users:表示当前系统有两个用户正在登录
load average:平均负载(衡量系统的繁忙程度)
Task-195 total:表示一共有195个进程在运行( 1 running:1个任务正在运行193 sleeping:193个正在休眠)
%CPU(s):2.0us (2%的CPU被用在用户状态计算),0.3sy(1.7%正在进行进程状态的交互),97.7id(97.7%正在处于空闲状态)
进程之间的控制
首先使用vim命令写一个显示脚本进程的PID的演示程序a.sh(便于观察,写一个死循环使进程一直能够运行下去)
chmod u+x a.sh //首先为用户赋予一个对a.sh文件的执行权限
nice修改进程的优先级
本质为控制进程占用的资源,过多的话释放出来一下,过少的话获得更多的资源。
./a.sh //启动进程a.sh
//产生的子进程会继承父进程的用户(root)
当查看终端运行中的进程时,需要新建立一个终端执行相应的查看命令:
top -p 3358 //查看3358进程
可以发现,该进程的NI值(nice)为0,我们可以使用nice修改进程的优先级之后再进行查看
nice -n 10 ./a.sh
top -p 3574 //查看3574进程
修改完进程之后发现NI的值为10
renice修改正在运行进程的优先级
如果想修改的进程的优先级而且不想关闭程序,可以使用renice
renice -n 15 3574
修改完成之后发现NI的值为15
jobs作业控制
把后台的程序调回到前台
./a.sh & //在后端运行进程a.sh
jobs //查看后台的进程
fg 1 //输入要调回前台进程的编号
把前台的程序调回到后台
./a.sh //启动a.sh(默认在前台)
按下ctrl+z
按下ctrl+z后程序调入后台并且是一个已经停止的状态,主要运用于服务器上前台的备份,但在前台的备份太消耗磁盘IO,可以调入到后台进行临时的停止,为挂起的状态,如果想要调回前台,可以使用jobs。
进程之间的通信
通过信号机制停止一个程序的运行
kill -l //查看所有的信号
例如信号9:杀死进程
./a.sh //打开另一个终端执行a.sh程序
kill -9 4472 //在另一个终端执行kill命令
守护进程
nohup命令关闭终端程序依然运行
当程序运行未结束的时候,关闭终端,程序会被终止,如果希望关闭终端时候程序不被关闭,可以使用nohup。
nohup tail -f /var/log/message & //以tail为例演示nohup
(如果tail输出内容会输出到nohup.out文件里)
打开终端进行查看,然后关闭nohup命令的终端再次进行查看
再次查看后会发现tail进程未被关闭,而且tail进程的父进程变为1,这是因为父进程被关闭,tail进程被1号进程收留,所以父进程变为了1 。
daemon进程方式
daemon程序,又称为守护进程,通常在系统后台长时间运行,由于没有控制终端而无法与前台交互。daemon程序一般作为系统服务使用。
以sshd为例(在启动时候在没有终端就能启动起来)