什么是进程?
进程是程序 的一次执行,可以和别的进程并发执行的计算。在给定活动空间和初始条件下,在一个处理器上的执行过程,是系统进行资源分配和调度的一个独立单位。进程是动态的、有生命周期的活动。内核可以创建一个进程,而最终将由内核终止该进程使其消亡
通过ps,top查看进程
pstree - display a tree of processes
[root@localhost ~]# pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─VGAuthService ├─abrt-watch-log ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─chronyd ├─colord───2*[{colord}]
ps - report a snapshot of the current processes
ps -ef
[root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 8月22 ? 00:00:12 /usr/lib/systemd/systemd --switched-root --system root 2 0 0 8月22 ? 00:00:00 [kthreadd] root 3 2 0 8月22 ? 00:00:01 [ksoftirqd/0] root 5 2 0 8月22 ? 00:00:00 [kworker/0:0H] root 7 2 0 8月22 ? 00:00:00 [migration/0] root 8 2 0 8月22 ? 00:00:00 [rcu_bh]
ps aux
[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 193700 4984 ? Ss 8月22 0:12 /usr/lib/systemd/systemd --switch root 2 0.0 0.0 0 0 ? S 8月22 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 8月22 0:01 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 8月22 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 8月22 0:00 [migration/0] root 8 0.0 0.0 0 0 ? S 8月22 0:00 [rcu_bh]
a 显示终端上的所有进程,包括其他用户的进程
x 显示没有控制终端的进程
u 选项来查看进程所有者以及其他的一些详细信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:进程拥有者
PID:pid
%cpu:占用的CPU使用率
%MEM:占用的记忆体使用率
VSZ:占用的虚拟记忆体大小
RSS:占用的记忆体大小
TTY:终端的次要装置号码
STAT:该进程的状态
D:不可中低端的静止
R:正在执行中
S:静止状态
T:暂停执行
Z:不存在但暂时无法消除
W:没有足够的记忆体分页可以分配
<:高优先序的进程
N:低优先序的进程
L:有记忆体分页分配并锁在记忆体里
START:进程开始的时间
TIME:执行的时间
COMMAND:所执行的命令
ps工具标识进程的五种状态码:
D:不可中断
R:运行
S:中断
T:停止
Z:僵死
top - display Linux tasks
[root@localhost ~]# top top - 17:52:22 up 1 day, 16 min, 3 users, load average: 0.00, 0.01, 0.05 Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1867048 total, 90128 free, 900872 used, 876048 buff/cache KiB Swap: 2097148 total, 2066476 free, 30672 used. 699500 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 726 root 20 0 21620 1024 864 S 0.7 0.1 0:26.39 irqbalance 9 root 20 0 0 0 0 S 0.3 0.0 0:18.25 rcu_sched 1 root 20 0 193700 4984 3000 S 0.0 0.3 0:12.93 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.16 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:01.71 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.46 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
top命令时Linux系统管理的一个主要的命令,通过她可以获得许多信息,,具体请百度。。我也写不清楚。。
信号控制进程kill ,pkill
信号
进程使用称为信号的消息进行通信,进程随时都会接受信息(异步)。除信号编号(表示信号属于那种类型)之外,信号不懈怠其他任何信息。
操作系统通过信号与进程之间进行通信,根据信号进行编号,进程能以不同的方式处理信号。在许多种情况下,这些信号劲导致进程退出,一个典型的信号是SIGTERM,该信号终止进程,要求他干净的退出,另一个是sigkill,该信号中断进程,需要立即退出。
man 7 signal命令查看手册
SIGNAL(7) Linux Programmer's Manual SIGNAL(7) NAME signal - 有效信号的清单 描述 (DESCRIPTION) 下面 列出 Linux 支持的 信号. 某些 信号 依赖于 体系结构(architecture). 首先, POSIX.1 描述了 下列 信号. 信号 值 动作 说明 ───────────────────────────────────────────────────────────────────── SIGHUP 1 A 在控制终端上是挂起信号, 或者控制进程结束 SIGINT 2 A 从键盘输入的中断 SIGQUIT 3 C 从键盘输入的退出 SIGILL 4 C 无效硬件指令 SIGABRT 6 C 非正常终止, 可能来自 abort(3) SIGFPE 8 C 浮点运算例外 SIGKILL 9 AEF 杀死进程信号 SIGSEGV 11 C 无效的内存引用 SIGPIPE 13 A 管道中止: 写入无人读取的管道 SIGALRM 14 A 来自 alarm(2) 的超时信号 SIGTERM 15 A 终止信号 SIGUSR1 30,10,16 A 用户定义的信号 1 SIGUSR2 31,12,17 A 用户定义的信号 2 SIGCHLD 20,17,18 B 子进程结束或停止 SIGCONT 19,18,25 继续停止的进程 SIGSTOP 17,19,23 DEF 停止进程 SIGTSTP 18,20,24 D 终端上发出的停止信号 SIGTTIN 21,21,26 D 后台进程试图从控制终端(tty)输入 SIGTTOU 22,22,27 D 后台进程试图在控制终端(tty)输出 下面的 信号 定义 在 SUSv2 中, 而 POSIX.1 没有 定义.
使用kill命令可以给进程发送信号
kill pid 可以杀掉进程
通过nice控制进程的优先级
每个逻辑处理单元在其CPU上一次只能执行一个进程,因此,每个可以运行的进程都具有调度优先级;就绪进程的排名,可以确定下一个应该运行的进程。
Linux进程调度程序将CPU时间分为时间段,每个进程将依次在逻辑处理单元上运行,优先级较高的进程先运行,用于计算此优先级的公式十分复杂,但是用户可以通过设置进程的nice来影响进程的优先级。
nice的范围是从-20(非常希望占用它进程的CPU时间)到19(非常愿意将CPU时间让给其他的进程),默认值为0.
root用户可以提高和降低nice的值,普通用户只能提高nice的值(降低优先级)
在一个终端运行top命令,切换到另一个终端用ps命令查看top命令的默认nice值
[root@localhost ~]# ps axo pid,nice,tty,comm | grep top 76524 0 pts/1 top [root@localhost ~]#
nice可以用于设置新警察的nice值
[root@localhost ~]# ps axo pid,nice,tty,comm | grep top 76535 5 pts/1 top [root@localhost ~]#
renice可以用于更改正在运行的进程的nice值
[root@localhost ~]# ps axo pid,nice,tty,comm | grep top 76535 5 pts/1 top [root@localhost ~]# renice -5 76535 76535 (进程 ID) 旧优先级为 5,新优先级为 -5 [root@localhost ~]#
掌握shell作业控制机制jobs
作业控制
Linux总的前台任务和后台任务,对应的就是前台进程和后台进程
前台进程是属于某一个终端的进程,如果使用这个终端的推出了,那么这个进程就会被kill掉
后台进程是独立于任何终端的进程,除非是进程自己主动退出(正常和非正常),或者被其他的进程和手工手动kill掉,后台进程会一直运行到关机
如果在进程运行的时候加上一个&符号,那么当前的终端就会被释放出来,程序是放在了后台去运行的(可以在后台放置多个程序)
[root@localhost ~]# firefox &
[root@localhost ~]#
但是查看后台还是可以查到这个进程的
在后台运行的进程可以通过%加作业好(ID),用fg调回前台运行
[root@localhost ~]# firefox & [1] 76847 [root@localhost ~]# jobs [1]+ 运行中 firefox &
fg %1 这样可以调回前台运行
通过xshell打开会报错,但是直接在服务器运行就完全没问题
在后台挂起的任务,可以使用bg使任务继续在后台运行
使用kill %1命令可以杀死任务
[root@localhost ~]# kill %1 [root@localhost ~]#