在Windows中如果一个程序出现了以异常,我们通常会使用任务管理器来进行调试管理操作
在Linux中也有类似的方式
进程生命周期
当一个程序安装好后,在磁盘中占据空间
当这个程序被调用时,就代表着进入进程
进程拥有生命周期,可以分为以下几个阶段状态:
- 创建(Creation):当一个程序被执行时,操作系统会创建一个新的进程。这个新进程被分配一个唯一的进程ID,并在进程表中被注册
- 就绪(Ready):在创建后,进程进入就绪状态,等待CPU调度以运行。多个就绪进程可能会争夺CPU资源
- 运行(Running):当一个就绪进程获得CPU时间片后,它就变成了运行状态。在运行状态下,进程执行其指令,直到它主动放弃CPU或被其他高优先级进程抢占
- 阻塞(Blocked):一个运行中的进程可能会因为等待某种事件的发生而暂时停止执行。例如,等待用户输入、等待磁盘IO等。在这种情况下,进程进入阻塞状态,并停止使用CPU
- 终止(Termination):进程可以通过以下方式终止:正常退出、异常退出(例如因为错误操作导致程序崩溃)、被其他进程结束、被操作系统终止等。进程终止后,它的资源会被释放,包括内存空间、打开的文件等
查看进程
我们可以通过ps
命令来查看进程的信息(静态)
ps aux | grep httpd
也可以使用top
命令来查看进程的实时信息(动态)
这种情况下默认每5秒更新一次进程信息
在top所显示的信息栏中,我们可以使用以下按键来做不同的事:
- M 按内存使用情况进行排序
- P 按CPU使用情况进行排序
- h 显示帮助
- F 选择感兴趣的进程,空格选择或取消
作业控制
生产当中,我们往往只有一个终端
在这种情况下,当一个命令一直执行不完,我们又不想等待
我们可以把这个进程放在后台进行
使用CMD &
命令
我们也可以Ctrl + z
将其放在后台并且停止运行
一般管理后台进程,有以下几种方式:
jobs
列举bg
后台恢复运行fg
前台恢复运行kill %N
发送结束信号(N为进程id)
下面我们使用一个例子来加深这一块的理解:
为了可以让大家简单的理解,我们使用ping命令来持续查看网络信息
我们可以通过ifconfig命令来查看当前所有接口的信息
然后在其中找到我们想要监视的ip
一般来说,虚拟机访问外部网络的接口是ens类型
访问内部网络的接口是br或者virbr类型
但我们一般会使用网络接口lo的IP地址127.0.0.1来进行监视
我们在这里输入了ping 127.0.0.1
命令来实时监控该ip的信息
可以发现一直在实时更新
此时我们可以使用'Ctrl + z'组合键将其停止运行,并放在后台
可以看到后台显示id为1的进程此时为Stopped状态
我们也可以开启多个终端,通过使用tty
命令查看当前终端号的方式,来进行输出重定向
实现将信息输出到另一个终端
首先我们使用tty
命令查看当前终端号,为/dev/pts/1
随后我们在一个新的终端上输入ping 127.0.0.1 > /dev/pts/1命令
将信息输出重定向到终端1上
效果如上图所示
此时我们使用组合键Ctrl + z可以暂停右边终端的信息输出
终止进程
对进程的操作,我们可以通过发送不同的信号实现
信号来源:
- 外部信号 如Ctrl + C终止
- 通过kill等命令向进程发送信号
- 程序错误,如非法访问内存
而一般我们会使用kill + 信号名称或号码来使用
SIGHUP (1)
- 挂起信号,通常用于告诉进程重新加载配置文件SIGINT (2)
- 中断信号,通常来源于用户输入,例如按Ctrl+CSIGQUIT (3)
- 退出信号,通常来源于用户输入,例如按Ctrl+D,它允许核心转储SIGKILL (9)
- 强行杀死信号,用于立即结束进程。不能被捕获或忽略SIGTERM (15)
- 终止信号,它是默认信号,用于请求程序正常退出SIGSTOP (17,19,23)
- 停止信号,用于暂停一个进程的执行。不是所有系统都使用相同的号码
监控活动进程
对于活动进程而言,我们有一个叫做活动优先级的概念,默认优先级为0
优先级的作用是给予进程一个先后执行的顺序
我们通过修改程序优先级来更改执行顺序
nice值便是决定优先级的数值
nice 值的范围是-20 到19,默认为0
nice越小优先级越高
我们可以通过修改nice值来更改优先级
- 查看 nice 值
使用ps命令
ps axo pid,comm,nice
- 设定nice值
nice 命令
以指定nice值运行新进程
nice -n VALUE CMD
- renice 命令
以新指定的 nice值重新运行进程
renice -n VALUE PID
只有 root 用户可以调高进程 nice 值