关于Linux进程的基础知识
程序员文章站
2022-05-11 15:05:11
...
### 前言
在计算机里面,一个进程通常指的是一个运行程序的实例,它包含程序代码和其活动。依赖于具体的操作系统,一个进程启动后通常由若干个线程组成,多个线程可以同时并发的执行程序的指令,进程里面第一个启动的线程,通常称为主线程。
### 进程的类型
#### 前台进程
通常也指交互进程,这些进程一般都是通过linux终端会话创建的,换句话说必须有用户连接到系统上,然后开启一个进程,这种进程不会被系统函数或者创建。
#### 后台进程
通常也指非交互进程,不需要连接到终端执行,也不需要用户的输入
### 关于守护进程
守护进程是一种特殊的后台进程,通常由操作系统启动,然后一直保持运行,作为一个永久服务,除非系统关机,否则永远不会死亡。守护进程在linux里面,可以通过init进程控制。
### linux进程的创建
在linux里面,一个新的进程通常由已经存在的进程创建,新的线程一般称为子进程,创建的线程称为父进程,子进程完全拷贝父进程的运行环境,仅仅进程id不一样。
在linux里面有两种创建新的进程的方法:
(1)使用system函数
相对简单,但是不高效其有一定的风险
(2)使用fork和exec函数
相对复杂,相比system函数,提供了更灵活,更快,更安全的创建方式。
### 如何识别进程
因为linux是多用户的操作系统,意味着不同的用户可以运行不同的程序在系统上,每个运行的程序在内核里面必须是唯一的。
这就是process id和parent process id,也称pid和ppid:
父进程指的是在运行期间创建其他进程的进程。
子进程指的是被创建的进程
### 关于init进程
init进程是linux系统里面所有进程的父进程,它是linux系统引导加载的时候执行的第一个程序,它管理所有其他的进程,init进程由内核启动,原则上它没有父进程。此外init进程的pid总是1。
### 进程的状态
NEW:等待被创建的进程
READY:该进程正在等待分配给处理器
RUNNING:正在执行程序指令的进程
WAITTING:进程等待一些事件完成(例如io完成,或者受到signal信号)
TERMINATED:运行结束的进程
特殊的状态Zombie:进程已经死亡,但其仍然在进程表里面,也称僵尸进程。
### 如何查看当前正在运行的进程的状态
(1)ps命令
(2)top命令
(3)htop命令
(4)glances命令
### 终止进程的方式
``` kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX ```
一般比较熟悉的暴力停止:kill -9 pid。
这个强大和危险的命令迫使进程在运行时突然终止,进程在结束后不能自我清理。
危害导致系统资源无法正常释放,一般不推荐使用,除非其他办法都无效。
立即把进程无条件的杀掉
还有比较温和的kill -15:
友好告诉进程退出,进程先保存好数据,再正常退出。
给父进程发送一个 TERM 信号,试图杀死它和它的子进程。
请求彻底终止某项执行操作.它期望接收进程清除自给的状态并退出
其他的如果是在一个前台进程的中:
中断命令:Ctrl-c(SIGINT 2) 发送SIGINT信号给前台进程组中的所有进程,强制终止程序的执行;
挂起命令:Ctrl—z(SIGTSTP 20) 前台进程的挂起
退出命令:Ctrl-d (SIGQUIT 3)一个特殊的二进制值,表示EOF,作用相当于在终端中输入exit后回车;
除了kill指定pid,还可以指定应用程序的名字进行kill:
如:
``` killall firefox ```
### 进程的PCB信息
每个进程都有一个进程控制块,包含有关进程的所有信息。它是一种数据结构,包含以下内容:
(1)进程的状态
(2)进程的id或者父id
(3)cpu寄存器和程序计数器
(4)cpu调度信息,例如一个优先级信息
(5)内存管理信息,例如page表和segment表
(6)账户信息,例如内核cpu时间,账户计数等
(7)io状态信息,设备分配或者打开的文件表等
### 总结
本文主要介绍了Liunx里面关于进程相关的信息,进程是正在运行程序的实例,也是操作系统资源分配的基本单位,线程是cpu调度的基本单位。此外,进程的PCB记录了每个进程详细的描述信息,通过这个数据块,我们可以详细的了解当前进程的执行状态。
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs) 关注公众号的朋友,可以加入我们的:攻城师互助交流群,一起学习!
上一篇: 关于PHPMailer的一些不解