目录
1.多进程
1.1多进程的概念
进程:进程就是程序的一次执行的过程。进程又可以理解为一个正在执行的任务。进程是分配资源的最小单位,进程只要被创建出来就会分配0-3G的用户空间,所以0-3G的空间有多份。而内核空间只有一份。例如文件描述符就是每个进程所特有的。如果在进程中使用标准IO,缓冲区也在这个空间中。进程是一个动态执行的过程,它是具有生命周期的。当程序执行的时候进程被创建,当程序执行结束的时候进程被销毁。进程是被内核创建的,在内核中通过task_struct(pcb)结构体代表进程。当一个程序开始执行的时候内核使用task_struct结构体定义一个变量,并会将它放到正在运行的队列上。
2.多进程相关概念
2.1进程和程序的区别
程序:通过gcc编译生成的可执行文件就是程序,程序是静态的,没有生命周期的概念,程序在磁盘存储。
进程:程序的一次执行过程就是一个进程。进程是动态的,具备生命周期。进程也是分配资源的最小单位。
进程是运行在内存上。
2.2进程的组成
进程组成三个部分:进程控制块(PCB),数据段,文本段。
2.3进程的种类
进程的种类分为三种:交互进程、批处理进程、守护进程。
交互进程:交互进程是有shell控制的,通过shell能够和用户进行交互。
例如文本编辑器就是交互进程
批处理进程:在linux内核中批处理进程又一个专门的队列维护。优先级相等
较低。例如gcc在编译程序的时候就是批处理进程。
守护进程:守护进程是后台运行的进程,脱离某个终端,它随着系统的运行而运行,
随着系统的终止为终止。例如:windows上的各种服务就是守护进程
2.4什么是PID?
PID(进程号):在系统上运行的每个程序都有一个唯一的编号,就是进程号。进程号
是一个大于等于0的数值。进程号可以通过如下的方式查看。
在进程号对应的目录下可以看到进程的状态信息
2.5几个特殊PID的进程
0号进程(idle):在操作系统启动的时候,最先执行的进程就是0号进程。如果
操作系统中没有其他的进程执行了,就执行这个进程idle(空闲)
1号进程(init):1号进程的的父进程是0号进程,它是内核中(kernel_thread)创
建的进程,它的主要工作就是初始化各种硬件的,当初始化完各种硬
件之后它可以为孤儿进程回收资源。
2号进程(kthreadd):2号进程是调度器进程,主要负责进程的调度执行的过程,它也
是内核中(kernel_thread)创建。
2.6查看进程的命令
1.查看进程的父子关系
linux@ubuntu:/proc/sys/kernel$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 08:59 ? 00:00:02 /sbin/init auto noprompt
root 2 0 0 08:59 ? 00:00:00 [kthreadd]
root 3 2 0 08:59 ? 00:00:00 [rcu_gp]
root 4 2 0 08:59 ? 00:00:00 [rcu_par_gp]
root 6 2 0 08:59 ? 00:00:00 [kworker/0:0H-kb]
root 9 2 0 08:59 ? 00:00:00 [mm_percpu_wq]
root 10 2 0 08:59 ? 00:00:00 [ksoftirqd/0]
2.查看进程的各种信息
linux@ubuntu:/proc/sys/kernel$ ps -ajx
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
0 1 1 1 ? -1 Ss 0 0:02 /sbin/init
0 2 0 0 ? -1 S 0 0:00 [kthreadd]
2 3 0 0 ? -1 I< 0 0:00 [rcu_gp]
2 4 0 0 ? -1 I< 0 0:00 [rcu_par_gp]
2 6 0 0 ? -1 I< 0 0:00 [kworker/0:0H-kb]
2 9 0 0 ? -1 I< 0 0:00 [mm_percpu_wq]
SID:会话ID
PGID:组ID
PPID:父进程ID
PID :进程ID
在新打开一个终端的时候,就相当于创建一个会话。
一个会话包括多个进程组,其中只有一个前台进程组和多个后台进程组
一个进程组内可以有很多进程,这些进程又可以有父子关系
TTY:如果没有终端与之对应就是一个?
TPGID:如果是-1就代表的是守护进程
STAT:进程的状态
3.top、htop动态查看进程信息
进程 USER PR NI VIRT RES SHR � %CPU %MEM TIME+ COMMAND
2064 linux 20 0 1044348 159348 37172 S 0.7 4.0 0:22.68 node
11 root 20 0 0 0 0 I 0.3 0.0 0:07.59 rcu_sched
322 root 0 -20 0 0 0 I 0.3 0.0 0:00.79 kworker/2:1H-kb
1150 root 20 0 187972 13664 11144 S 0.3 0.3 0:06.46 vmtoolsd
4034 linux 20 0 44716 4120 3344 R 0.3 0.1 0:00.24 top
1 root 20 0 225644 9316 6576 S 0.0 0.2 0:02.09 systemd
4.通过进程名查看PID
pidof a.out
3935 3892
5.给进程发信号的命令
linux@ubuntu:~/work$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8)