什么是进程?

进程是程序 的一次执行,可以和别的进程并发执行的计算。在给定活动空间和初始条件下,在一个处理器上的执行过程,是系统进行资源分配和调度的一个独立单位。进程是动态的、有生命周期的活动。内核可以创建一个进程,而最终将由内核终止该进程使其消亡

通过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 ~]#