Linux进程管理

1. 了解进程的基本概念

  进程是计算机中运行的程序的实例。每个进程都有自己的内存空间、寄存器集合和执行上下文,可以独立地运行和执行任务。

进程的创建是通过操作系统的调度器来进行的。当一个程序被执行时,操作系统会为其创建一个新的进程,并为其分配必要的资源。这个新创建的进程将执行程序的代码,并在需要时进行系统调用、访问文件、进行网络通信等操作。

  每个进程都有一个唯一的进程ID(PID),用于在操作系统中标识和管理进程。进程可以通过父子关系进行组织,即一个进程可以创建另一个进程作为其子进程。

  进程可以运行在不同的状态下,包括运行状态、等待状态和终止状态。运行状态表示进程正在执行任务,等待状态表示进程正在等待某个事件的发生,终止状态表示进程已经完成任务或被终止。

  进程间可以通过进程间通信(IPC)机制进行数据传输和同步。常见的进程间通信方式包括管道、消息队列、共享内存、信号量等。

  通过进程管理,操作系统可以实现多任务并发执行、资源合理利用和进程间的协作,为用户提供高效、稳定的计算环境。

2. 掌握查看进程的基本方法

静态查看进程可以使用以下命令:

  `ps`命令:可以通过`ps`命令查看当前运行的进程。可以使用以下命令获取不同级别的信息:

   所有进程的详细信息,可以使用

ps aux

 

  如果想降序排列查看CPU占用率时,可以使用

ps aux --sort -%cpu

  显示进程的完整信息,可以使用

ps -ef


  显示所有进程的基本信息,可以使用

ps -e

 

  最后还可以使用cat、pidof、pgrep这几种常用的查看指定进程PID的方法。

这些命令可以提供进程的静态信息,但是无法实时更新。要动态查看进程的状态,可以使用以下命令:

   `top`命令:`top`命令可以实时显示系统中运行的进程和系统资源的使用情况。在默认的交互式模式下,它会动态更新进程列表和资源使用情况。

 

  `top`命令是一个非常强大的工具,用于实时监视系统的进程和资源使用情况。它显示了一个动态更新的进程列表,以及各个进程的CPU、内存、IO等使用情况。

  要使用`top`命令,只需在终端中输入`top`,然后按下回车键即可。默认情况下,`top`会按照CPU使用率进行排序,并以实时更新的方式显示进程列表。

  在`top`命令的界面中,你可以看到以下信息:

    - 第一行:系统的总体信息,包括运行时间、用户数、负载等。
    - 第二行:CPU使用情况,包括用户空间、内核空间、空闲等。
    - 第三行:内存使用情况,包括总内存、已使用、空闲等。
    - 第四行:交换空间使用情况,包括总交换空间、已使用、空闲等。
    进程列表:显示了系统中所有的进程,包括进程ID、用户、CPU使用率、内存使用量等。

  你可以使用以下快捷键来与`top`命令进行交互:

    - `q`:退出`top`命令。
    - `k`:结束选中的进程。
    - `r`:改变选中进程的优先级。
    - `s`:改变刷新时间间隔。
    - `P`:按照CPU使用率进行排序。
    -`M`:按照内存使用量进行排序。
    - `T`:按照进程运行时间进行排序。
    - `u`:显示特定用户的进程。
    - `H`:显示线程视图。

  `top`命令非常强大,提供了丰富的选项和功能,可以帮助你更好地了解和管理系统中的进程和资源使用情况。如果你想了解更多详细的使用方法,可以查阅`top`命令的帮助文档,输入`man top`即可。

3. 熟悉信号控制进程

  信号是一种进程间通信的机制,用于控制进程的行为。通过发送信号,可以请求进程执行某个动作,比如终止进程、暂停进程、重新启动进程等。

  在Linux系统中,信号由一个整数值表示,每个信号都有一个唯一的名称和编号。可以使用`kill`命令发送信号给进程,也可以使用`kill`命令的一些选项来指定要发送的信号。

  以下是一些常用的信号:

    - `SIGTERM`(编号为15):终止信号,用于请求进程正常退出。默认情况下,`kill`命令发送的信号就是SIGTERM。
    - `SIGKILL`(编号为9):强制终止信号,用于立即终止进程,不给予进程进行清理操作的机会。使用`kill -9`命令发送的信号是SIGKILL。
    - `SIGINT`(编号为2):中断信号,通常由Ctrl+C键触发,用于中断正在运行的进程。
    - `SIGSTOP`(编号为19):停止信号,用于暂停进程的执行。可以使用`kill -STOP`命令发送该信号。
    - `SIGCONT`(编号为18):继续信号,用于恢复被暂停的进程的执行。可以使用`kill -CONT`命令发送该信号。

  使用`kill -l`命令可以列出系统支持的所有信号及其对应的编号。  

  `kill`命令是用于终止正在运行的进程的命令。它发送一个信号给指定的进程,使其终止运行。默认情况下,`kill`命令发送的信号是SIGTERM(终止信号),这会使进程优雅地退出。如果进程没有正常退出,你可以使用                                      

  `kill -9`命令发送SIGKILL信号,强制终止进程。

  `kill`命令的一般语法如下:

kill [options] <pid> 

  其中,`options`是可选的参数,`<pid>`是要终止的进程的进程ID。

  下面是一些常用的`kill`命令选项:

    - `-l`:列出可用的信号名称。
    - `-s <signal>`:指定要发送的信号,默认为SIGTERM。
    - `-<signal>`:同`-s`选项,但信号名称不需要加前缀"SIG"。例如,`kill -TERM`等同于`kill -s TERM`。
    - `-p`:不发送信号,而是显示进程ID的相关信息。
    - `-a`:不限制要终止的进程的所有者。
    - `-u <user>`:只终止属于指定用户的进程。
    - `-s`:显示所有可用的信号。

  以下是一些示例:

    1. 终止进程ID为1234的进程:

kill 1234

  2. 终止进程ID为1234和5678的两个进程:

kill 1234 5678

 

  3. 列出可用的信号名称:

kill -l

 

   4.killall命令:

    `killall`命令是一个用于终止指定名称的进程的命令。它的基本语法是:

killall [选项] 进程名称

    使用killall命令终止sgw用户对应的所有进程

killall -u sgw

    使用`killall`命令时,可以通过进程名称来指定要终止的进程。如果存在多个同名的进程,`killall`会终止所有这些进程。

    常用的选项包括:

      - `-s`:指定要发送的信号,默认为`SIGTERM`。可以使用`killall -l`命令列出系统支持的所有信号。
      - `-u`:指定要终止的进程的用户。
      - `-e`:指定要终止的进程的环境变量。
      - `-I`:交互式模式,会在终止每个进程之前询问用户确认。
      - `-q`:静默模式,不显示终止的进程信息。

    需要注意的是,`killall`命令默认只能终止由当前用户启动的进程。如果要终止其他用户启动的进程,需要使用`sudo`命令以超级用户身份运行`killall`。另外,`killall`命令在不同的操作系统中可能有略微不同的行为,所以在使用时需要注意。

  请注意,`kill`命令需要使用超级用户权限(root权限)才能终止其他用户的进程。否则,你只能终止自己拥有的进程。另外,谨慎使用`kill -9`命令,因为它会强制终止进程而不给予其机会进行清理操作,可能会导致数据丢失或损坏。只有在其他方法无效时,才应使用`kill -9`命令。

  除了`kill`命令,还可以使用C语言的`kill`函数或`signal`函数来发送信号给进程。这些函数提供了更灵活的控制方式,可以在代码中动态处理接收到的信号。

4. 了解进程优先级原理

  在Linux系统中,进程的优先级通过nice值来表示,范围从-20到19,其中-20表示最高优先级,19表示最低优先级。具体来说,Linux系统将进程的静态优先级分为实时优先级和普通优先级。

    1. 实时优先级:实时进程是具有固定优先级的进程,其优先级范围从0到99。实时优先级按照时间片轮转的方式进行调度,优先级较高的实时进程会在优先级较低的实时进程之前获得CPU时间。

    2. 普通优先级:普通进程的优先级范围从100到139,其中默认的优先级是120。普通进程的优先级通过nice值来表示,范围从-20到19,其中-20表示最高优先级,19表示最低优先级。nice值越小,进程的优先级越高。

  在Linux系统中,可以使用以下命令来查看和修改进程的优先级:

    - `top`命令:可以查看系统中所有进程的信息,包括进程的PID、CPU使用率、内存使用量和优先级等。

     使用ps命令查看nice级别

ps axo pid,command,nice,cls -- sort=-nice

 

    使用ps可以查看进程的PID、nice值和命令。

ps -eo pid,nice,cmd

 

    - `renice`命令:可以修改进程的优先级。使用`renice`命令时,需要指定进程的PID和新的nice值。

    例如,将进程ID为1234的进程的优先级降低10。

renice -n -10 -p 1234

    - `nice`命令:可以启动一个新的进程,并指定其初始优先级。

    例如,将以优先级-10启动一个新进程。

nice -n -10 command

总之,在Linux系统中,进程的优先级通过nice值来表示,范围从-20到19,其中-20表示最高优先级,19表示最低优先级。实时进程的优先级范围是0到99,按照时间片轮转的方式进行调度。可以使用`top`、`ps`、`renice`和`nice`命令来查看和修改进程的优先级。

5. 了解作业控制

  在Linux系统中,作业控制是通过Shell来实现的。Shell是用户与Linux内核交互的接口,通过Shell可以启动新进程、管理进程和控制作业。

  作业控制的一些常用命令包括:

    1. `bg`:将一个作业放到后台运行。可以使用`jobs`命令查看当前的作业列表,然后使用`bg %jobid`将指定的作业放到后台运行。

    2. `fg`:将一个作业放到前台运行。可以使用`jobs`命令查看当前的作业列表,然后使用`fg %jobid`将指定的作业放到前台运行。

    3. `kill`:终止一个进程。可以使用`kill`命令向指定的进程发送终止信号。可以使用`jobs`命令查看当前正在运行的进程,然后使用`kill %jobid`终止指定的进程。

  除了以上命令,还可以使用Shell脚本来实现更复杂的作业控制功能。通过编写Shell脚本,可以实现自动化的作业管理和控制,如定时执行任务、批量处理数据等。

学习总结

  通过本次学习,我了解了进程的基本概念、查看进程的方法、信号控制进程的原理、进程优先级的概念以及作业控制的方法。

  进程是计算机中运行的程序的实例,每个进程都有自己的内存空间、寄存器集合和执行上下文。我们可以使用ps命令和top命令来查看当前运行的进程,ps命令提供了静态的进程信息,而top命令可以动态更新进程列表和资源使用情况。

  信号是一种进程间通信的机制,可以控制进程的行为。我们可以使用kill命令向进程发送信号,常用的信号包括终止信号(SIGTERM)、强制终止信号(SIGKILL)、中断信号(SIGINT)等。

  进程的优先级通过nice值来表示,范围从-20到19,nice值越小,进程的优先级越高。我们可以使用renice命令和nice命令来查看和修改进程的优先级。

  作业控制是通过Shell来实现的,通过bg命令将作业放到后台运行,通过fg命令将作业放到前台运行,通过kill命令终止进程。

  通过本次学习,我对进程的管理和控制有了更深入的了解,这对于提高系统的稳定性和效率非常重要。我还学到了一些常用的命令和技巧,可以帮助我更好地管理和控制进程。

posted @ 2023-11-25 12:12  唐屿  阅读(79)  评论(0)    收藏  举报