在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 得到)