在Linux中,所有的进程都必须由另一个进程创建。应用程序只能通过克隆自己来产生新进程,因此,子进程是父进程的克隆体。
- 进程标识,PID,Precess IDentifier
- 父进程标识,PPID,Parent PID
- 群组标志,GID,Group ID,进程创建者所属组的ID。
- 优先级,优先级高的进程能够更早地被处理,并获得更多的处理时间。
- 谦让度,高谦让度意味着低优先级。进程管理工具让用户设置的总是谦让度
- BASH 作业管理:
- 命令后添加‘&’,在后台运行进程
- Ctrl +C 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。
- Ctrl + Z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。(后台运行)
- 管理后台作业:
- jobs 显示当前暂停的进程
- bg %N 使第N个任务在后台运行(默认对最后一个进程操作)
- fg %N 使第N个任务在前台运行(默认对最后一个进程操作)
一、进程监控
ps Precess Status. / report a Snapshot of the current Pocesses(静态监控) $ps aux # To see every process on the system using BSD syntax(显示当前系统上运行的所有进程的信息) ``` USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND alex 16781 0.0 0.0 9908 3684 pts/1 S+ 22:32 0:00 man ps USER 进程创建者的用户名 PID 进程的ID号 %CPU 进程占用CPU百分比 %MEM 进程占用内存百分比(memory) VSZ 进程占用的虚拟内存大小 RSS 内存中页的数量 TTY 进程所在终端的ID号 STAT 进程状态: R 正在运行/可运行 Run D 睡眠中(不可被唤醒,通常是在等待I/O设备) S 睡眠中(可以被唤醒) Sleep T 停止(由于收不到信号or被跟踪) Z 僵进程(已经结束而没有释放系统资源的进程) 常用的附加标志: < 进程拥有比普通优先级高的优先级 N 进程拥有比普通优先级低的优先级 L 有些页面被锁在内存中 Lock s 会话的先导进程 session START 进程启动的时间 TIME 进程已经占用的CPU时间 COMMAND 命令&参数 ``` $ps lax # 提供PPID和NI(谦让度) ``` F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 0 1000 16781 16778 20 0 9908 3684 do_wai S+ pts/1 0:00 man ps ``` top display Linux processes(动态监控:默认占满一页,并且在默认情况下每10s更新一次。使用CPU最多的程序会排在最前面) q Quit ``` alt + up PgUp alt + down PgDn alt + Left Home alt + Right End ``` kill send a signal to a process(向进程发送信号。信号名的前缀SIG可以省略,即SIGTERM=TERM) kill [option] pid -l --list List signal names(显示所有信号及其编号) - -s --signal Specify the SIGNAL to be sent. The signal can be specified by using name or number. ``` 0 EXIT 1 HUP 挂起 Ctrl + C 2 INT 中断 Ctrl + \ 3 QUIT 退出 9 KILL 杀死 15TERM 软件终止(The default signal for kill) 18CONT 程序的再启动指令(19STOP后再重新启动) Ctrl + Z 19STOP 软件停止(挂起) 使用 trap "" TERM 可以忽略TERM信号。 KILL信号永远不能被程序忽略。(sudo kill -9 pid 或 sudo kill -KILL pid 或 sudo kill -SIGKILL pid) ```
- 如果用户不采取任何行动,那么新进程将从其父进程那里继承谦让度。
- 进程的属主可以提高其谦让度,但不能降低其谦让度。(这种限制保证了低优先级的进程不会派生出高优先级的子进程)
- root用户可以任意设置进程的优先级
nice run a program with modified scheduling priority(在启动程序时设置其谦让度。谦让度的值应该在-20~+19之间浮动) nice [option] COMMAND nice 不带任何参数的nice查看默认谦让值(通常为0) -n N --adjustment add integer N to the niceness(default 10 without -n)。(默认谦让值加上N) renice alter priority of running processes(在进程运行是调整其谦让度。直接设置为N) renice N -p PID -n --priority -g --group -p --pid -u --user
二、/PROC
文件系统
- Linux 内核提供了一种在运行时访问内核内部数据结构、改变内核设置的机制,这通过 /PROC 完成。
- /PROC 是一个伪文件系统,它只存在于内存当中,而不占用外存空间。
- 它以文件系统的方式为访问系统内核数据的操作提供接口。
- 系统中当前运行的每一个进程都有对应的一个目录在 /proc 下,以进程的PID号为目录名,它们是读取进程信息的接口。(ps和top命令就是从这个地方读取数据)
ls /proc 查看/proc目录 /proc/1 包含着init进程的信息。该进程由内核在系统启动时创建,是除了那个时候同时创建的几个内核进程之外的所有进程的父进程。 /proc/stat 包含了进程的状态信息,ps 命令通过读取这个文件向用户提供输出。 /proc/sys/ 可写,可以通过它来访问or修改内核的参数 /proc/net/和scsi/ 依赖于内核的配置。(如果系统不支持scsi,则该目录不存在)
- Linux 中所有的内容都是以文件的形式管理的。即 "Everything is a file."(e.g. 命令
uname -a
所返回内容,可在文件/proc/version
得到)