Linux 高手都是键盘侠,命令速查,命令学习,命令练习(七)进程管理

135 阅读22分钟

Linux 曾经是许多新人的“噩梦”,当你真的面对它、了解它时你会发现命令的操作方式才是最纯粹最高效的操作方式。Linux并不复杂,只是不符合人类对实物操作的“直觉”,只要适应一段时间就好。这里梳理了我们在使用linux时常用的命令和这些命令的用法与使用场景,我们不用全部死记硬背,只需简单过目留个印象,并在遇到相同使用场景时来速查便可。只要稍微有一点计算机的基础、经过几次Linux的实践,你会发现它并没有那么可怕,反而会觉得它很高效,很直接,享受这个过程吧~

如果内容对大家有帮助,请大家【点赞】【收藏】,给予作者鼓励,感谢阅读。

16 进程管理

bg-将作业放入后台运行

在Linux命令行中,bg命令用于将一个被停止(暂停)的作业(Job)转为后台运行。当您在前台运行一个命令时,可以使用bg命令将其切换到后台,以便在后台继续运行而不占用当前终端的控制。

下面是bg命令的一些常见用法和代表性示例:

  1. 将最近的停止作业切换到后台:

    bg
    

    这个命令将最近被停止的作业切换到后台继续运行。

  2. 将指定作业切换到后台:

    bg %1    # 将作业编号为1的作业切换到后台
    

    这个命令将作业编号为1的作业切换到后台继续运行。

  3. 列出当前正在运行的作业并选择一个作业切换到后台:

    jobs    # 列出当前作业列表
    bg %2   # 将作业编号为2的作业切换到后台
    

    这个命令首先列出当前正在运行的作业,然后根据需要选择一个作业切换到后台。

  4. 将前台运行的命令切换到后台: 在前台运行一个命令时,按下 Ctrl + Z 将其暂停,然后使用 bg 命令将其切换到后台。

    command_name    # 在前台运行一个命令
    Ctrl + Z        # 暂停该命令
    bg              # 将该命令切换到后台
    

    这个命令将前台运行的命令切换到后台继续运行。

注意:使用bg命令切换作业到后台后,作业将继续在后台运行,不会在终端显示输出。如果需要查看或操作后台作业,请使用jobs命令查看作业列表,或使用fg命令将作业切换回前台。

这些是bg命令的一些常见用法和示例。您可以使用man bg命令查看特定发行版的文档,了解更详细的用法和选项。

fg-将作业放回前台运行

在Linux命令行中,fg命令用于将一个在后台运行的作业(job)切换到前台运行。它通常与bg命令(将作业切换到后台)一起使用,用于管理作业的状态。下面是fg命令的一些常用用法和示例:

  1. 将最近的后台作业切换到前台:

    fg
    

    这个命令将把最近在后台运行的作业切换到前台运行。

  2. 将指定作业切换到前台:

    fg %1
    

    这个命令将作业号为1的后台作业切换到前台运行。

  3. 恢复挂起的作业到前台:

    fg -l
    

    这个命令将显示当前所有挂起的作业,并允许您选择将哪个作业切换到前台运行。

  4. 将作业切换到前台并保持运行:

    fg %2
    

    这个命令将作业号为2的后台作业切换到前台运行,并继续其执行。

注意:fg命令仅适用于在后台运行的作业。它用于将作业切换到前台以便与其交互。如果没有后台作业或没有指定作业号,fg命令将显示错误信息。可以使用jobs命令查看当前运行的作业和作业号。

jobs-显示当前 shell 的作业列表

在Linux中,jobs命令用于显示当前在后台运行的作业(即以&符号运行的命令)。它可以列出作业的编号和状态,并提供一些操作选项。下面是jobs命令的一些常用用法和代表性示例:

  1. 列出当前作业:

    jobs    # 列出当前在后台运行的作业
    

    这个命令将显示当前所有在后台运行的作业的编号和状态。

  2. 将作业置于前台运行:

    fg %1    # 将编号为1的作业置于前台运行
    

    这个命令将编号为1的作业从后台调至前台运行。

  3. 将作业置于后台运行:

    bg %2    # 将编号为2的作业置于后台运行
    

    这个命令将编号为2的作业从前台调至后台运行。

  4. 终止作业:

    kill %3    # 终止编号为3的作业
    

    这个命令将终止编号为3的作业。

  5. 列出作业状态:

    jobs -l    # 列出作业的详细状态信息
    

    这个命令将显示作业的详细状态信息,包括作业编号、PID(进程ID)、作业状态等。

注意:jobs命令仅能显示当前终端会话中的作业信息。如果您在多个终端会话中运行了后台作业,则需要在相应的会话中使用jobs命令来查看该会话中的作业信息。如果作业已完成或被终止,它们将不再显示在jobs命令的输出中。建议使用man jobs命令查看特定发行版的文档以了解更详细的用法和选项。

kill-终止指定的进程

在Linux中,kill命令用于发送信号给指定的进程,以控制其行为。通过发送不同的信号,可以实现不同的操作,如终止进程、重新加载配置文件、重新启动进程等。下面是kill命令的一些常用用法和代表性示例:

  1. 终止进程:

    kill <PID>    # 终止指定进程
    

    这个命令将发送默认的终止信号(SIGTERM)给指定进程,使其正常终止。

  2. 强制终止进程:

    kill -9 <PID>    # 强制终止指定进程
    

    这个命令将发送强制终止信号(SIGKILL)给指定进程,无论进程是否响应都会被立即终止。

  3. 重新加载配置文件:

    kill -HUP <PID>    # 重新加载配置文件
    

    这个命令将发送重新加载配置文件的信号(SIGHUP)给指定进程,使其重新加载配置文件,通常用于服务器软件的配置更新。

  4. 列出可用的信号:

    kill -l    # 列出所有可用的信号
    

    这个命令将列出系统支持的所有信号及其对应的编号。

  5. 通过进程名称终止进程:

    pkill <process_name>    # 终止指定名称的进程
    

    这个命令将根据进程名称终止匹配的进程,类似于kill命令,但可以直接使用进程名称而无需指定进程ID。

注意:在使用kill命令终止进程时,请谨慎操作,确保只终止您想要终止的进程。使用kill命令时,可以使用进程ID(PID)或进程名称来标识要操作的进程。可以使用ps命令或pgrep命令来获取进程ID或进程名称。建议在终止进程之前,尝试使用默认的终止信号(SIGTERM),如果进程不响应,则可以使用强制终止信号(SIGKILL)。使用man kill命令查看特定发行版的文档以了解更详细的用法和选项。

killall-终止指定名称的所有进程

在Linux中,killall命令用于通过进程名称来终止正在运行的进程。它会根据进程名来查找并发送信号给与之匹配的所有进程。下面是killall命令的一些常用用法和代表性示例:

  1. 终止指定进程:

    killall firefox    # 终止所有名为firefox的进程
    

    这个命令将终止所有名为firefox的进程。

  2. 终止多个进程:

    killall -r 'myapp.*'    # 终止名称以myapp开头的所有进程
    

    这个命令使用正则表达式'myapp.*'匹配名称以myapp开头的所有进程,并终止它们。

  3. 发送不同的信号:

    killall -s HUP myapp    # 发送HUP信号给名为myapp的进程
    

    这个命令将发送HUP信号给名为myapp的进程,可以用于重新加载配置或重新启动进程。

  4. 安静模式:

    killall -q myapp    # 安静模式,不显示警告消息
    

    这个命令在终止进程时不显示警告消息,只输出错误信息(如果有)。

  5. 显示进程信息:

    killall -l    # 列出所有可用的信号
    

    这个命令将列出所有可用的信号,可以用于参考信号编号。

注意:killall命令可以终止与指定进程名称匹配的所有进程,因此请谨慎使用。确保您指定了正确的进程名称,并且仅终止您希望终止的进程。建议使用man killall命令查看特定发行版的文档以了解更详细的用法和选项。

pkill-通过进程名终止匹配的进程

在Linux中,pkill命令用于根据进程名或其他条件来终止或信号处理进程。它通过匹配进程名或其他属性来选择要终止的进程,并向其发送指定的信号。下面是pkill命令的一些常用用法和代表性示例:

  1. 根据进程名终止进程:

    pkill firefox    # 终止所有名为"firefox"的进程
    

    这个命令将终止所有名为"firefox"的进程。

  2. 使用信号终止进程:

    pkill -SIGTERM firefox    # 向所有名为"firefox"的进程发送SIGTERM信号
    

    这个命令将向所有名为"firefox"的进程发送SIGTERM信号,请求它们正常终止。

  3. 根据用户终止进程:

    pkill -u username    # 终止属于指定用户的所有进程
    

    这个命令将终止属于指定用户名的所有进程。

  4. 使用正则表达式终止进程:

    pkill -f "pattern"    # 根据正则表达式模式终止匹配的进程
    

    这个命令将终止匹配指定正则表达式模式的进程。

  5. 向进程发送不同的信号:

    pkill -9 firefox    # 终止所有名为"firefox"的进程并强制终止
    

    这个命令将向所有名为"firefox"的进程发送SIGKILL信号,强制终止它们。

注意:使用pkill命令时要小心,确保只终止您想要终止的进程。请谨慎使用强制终止信号(如SIGKILL),因为它们会直接终止进程而不经过正常的清理过程。建议在使用pkill命令之前先使用pgrep命令来查找匹配的进程,并确保您选择正确的进程进行终止。

crontab-编辑或查看用户的定时任务

在Linux中,crontab命令用于创建、编辑和管理用户的定时任务(cron jobs)。定时任务是一种在指定时间间隔或特定时间点自动执行的任务。crontab命令允许用户创建一个包含任务执行时间和要执行的命令的定时任务列表。下面是crontab命令的一些常用用法和代表性示例:

  1. 查看当前用户的定时任务列表:

    crontab -l
    

    这个命令将显示当前用户的定时任务列表。

  2. 编辑当前用户的定时任务列表:

    crontab -e
    

    这个命令将打开一个文本编辑器,允许您编辑当前用户的定时任务列表。

  3. 删除当前用户的定时任务列表:

    crontab -r
    

    这个命令将删除当前用户的定时任务列表。

  4. 添加定时任务:

    crontab -e
    

    在打开的编辑器中添加以下行:

    * * * * * command
    

    这个示例将在每分钟执行一次command命令。

  5. 指定特定时间间隔:

    0 0 * * * command
    

    这个示例将在每天的午夜执行command命令。

  6. 使用通配符:

    */5 * * * * command
    

    这个示例将在每个小时的每五分钟执行一次command命令。

  7. 定义命令执行时间范围:

    0 9-17 * * 1-5 command
    

    这个示例将在每个工作日的上午9点到下午5点之间的每个整点执行command命令。

注意:定时任务的时间格式为分钟 小时 日期 月份 星期,使用空格或制表符分隔。对于每个字段,可以使用具体的数值、范围、通配符(*)以及其他特定的字符来定义任务执行时间。建议使用man crontab命令查看更详细的用法和选项,并根据您的需求创建适合的定时任务。

ps-显示系统中运行的进程状态

在Linux中,ps命令用于显示当前运行的进程信息。它提供了各种选项,可以显示不同级别的进程信息,如运行中的进程、系统进程、用户进程等。下面是ps命令的一些常用用法和代表性示例:

  1. 显示当前所有进程:

    ps -e    # 显示所有进程
    

    这个命令将显示所有当前运行的进程,包括系统进程和用户进程。

  2. 显示指定用户的进程:

    ps -u username    # 显示指定用户的进程
    

    这个命令将显示指定用户名的进程,包括系统进程和用户进程。

  3. 显示详细进程信息:

    ps -ef    # 显示详细进程信息
    

    这个命令将显示所有进程的详细信息,包括进程的PID、父进程的PID、运行状态等。

  4. 查找特定进程:

    ps -aux | grep process_name    # 查找特定进程
    

    这个命令将通过管道符将ps命令的输出传递给grep命令,以查找包含特定进程名称的进程。

  5. 显示进程树:

    ps -ejH    # 显示进程树
    

    这个命令将显示进程树,以层次结构的形式展示进程及其子进程的关系。

注意:ps命令提供了许多选项和标志,可以根据需要进行调整。建议使用man ps命令查看特定发行版的文档以了解更详细的用法和选项。

pstree-以树状图显示进程及其子进程

在Linux中,pstree命令用于以树形结构显示进程之间的父子关系。它以易于理解的方式显示进程的层次结构,可以帮助您快速了解进程之间的关系。下面是pstree命令的一些常用用法和代表性示例:

  1. 显示整个进程树:

    pstree
    

    这个命令将显示当前系统中所有进程的树形结构。

  2. 显示指定进程的树形结构:

    pstree <pid>
    

    这个命令将显示指定进程ID(pid)的树形结构,其中包括该进程的子进程和父进程。

  3. 以ASCII字符形式显示进程树:

    pstree -a
    

    这个命令将以ASCII字符形式显示进程树,可用于在终端中查看更多的进程信息。

  4. 显示进程命令行参数:

    pstree -c
    

    这个命令将显示每个进程的命令行参数,帮助您更好地理解进程的功能。

  5. 以宽格式显示进程树:

    pstree -w
    

    这个命令将以宽格式显示进程树,使您能够查看更长的命令行参数和进程名称。

  6. 仅显示指定用户的进程树:

    pstree -u <username>
    

    这个命令将只显示属于指定用户名的进程树,可以帮助您快速定位某个用户相关的进程。

注意:pstree命令默认以树形结构显示进程,每个进程由进程ID(PID)和进程名称组成。您可以通过使用不同的选项来自定义输出格式。建议使用man pstree命令查看特定发行版的文档以了解更详细的用法和选项。

nice/renice-设置进程的优先级

在Linux中,nicerenice命令用于调整进程的优先级。进程的优先级决定了它在系统资源分配中的优先级。nice命令用于启动新进程,并为其指定一个初始优先级值,而renice命令用于修改已经运行的进程的优先级。下面是这两个命令的详细说明和一些代表性的例子:

  1. nice命令: nice命令用于启动新进程并设置其初始优先级。优先级值范围从-20(最高优先级)到+19(最低优先级),默认为0。

    使用语法:

    nice [OPTION] [COMMAND [ARG]...]
    

    示例:

    nice -n 10 command    # 使用优先级值10启动命令
    

    这个命令将使用优先级值10启动指定的命令。

  2. renice命令: renice命令用于修改已经运行的进程的优先级。

    使用语法:

    renice [OPTION] priority [[-p] pid [...]] [[-g] pgrp [...]] [[-u] user [...]]
    

    示例:

    renice -n 5 -p 1234    # 将进程ID为1234的进程优先级调整为5
    

    这个命令将进程ID为1234的进程的优先级调整为5。

  3. 显示进程当前的优先级:

    nice -n -20 top    # 启动top命令,并将其优先级设置为最高
    

    这个命令将以最高优先级启动top命令。

  4. 修改已运行进程的优先级:

    renice -n 10 -p 1234    # 将进程ID为1234的进程优先级调整为10
    

    这个命令将进程ID为1234的进程的优先级调整为10。

  5. 修改用户所有进程的优先级:

    renice -n 5 -u user    # 将用户所有进程的优先级调整为5
    

    这个命令将指定用户所有进程的优先级调整为5。

注意:nicerenice命令需要root或具有sudo权限的用户才能调整其他用户的进程优先级。使用man niceman renice命令查看特定发行版的文档以了解更详细的用法和选项。

nohup-在后台运行命令,不受终端关闭影响

在Linux中,nohup命令用于在后台运行命令,并忽略所有挂断(SIGHUP)信号。这意味着即使用户注销或终端关闭,命令也将继续在后台运行。下面是nohup命令的一些常用用法和代表性示例:

  1. 在后台运行命令:

    nohup command &    # 在后台运行命令
    

    这个命令将以后台进程的形式运行给定的命令,并将输出重定向到当前目录下的nohup.out文件中。

  2. 在后台运行长时间运行的命令:

    nohup long_running_command > output.txt 2>&1 &
    

    这个命令将以后台进程的形式运行长时间运行的命令,并将输出重定向到output.txt文件中。2>&1表示将标准错误输出(stderr)也重定向到标准输出(stdout)。

  3. 通过nohup保持SSH会话中的命令运行:

    ssh user@host 'nohup command &'    # 在SSH会话中使用nohup
    

    这个命令将通过SSH连接到远程主机,并在远程主机上以后台进程的形式运行给定的命令。

  4. 使用自定义的输出文件:

    nohup command > output.txt 2>&1 &    # 将输出重定向到自定义的文件
    

    这个命令将以后台进程的形式运行命令,并将输出重定向到名为output.txt的自定义文件中。

注意:使用nohup命令运行的命令会在后台继续运行,但它们仍然与当前终端会话相关联。如果关闭终端会话,则命令会受到终端的挂断信号而终止。为了解决这个问题,可以使用disown命令或tmux等工具将进程与终端会话分离。请注意,某些命令可能仍然会产生输出,因此建议将其输出重定向到文件,以便后续查看。

有关更详细的用法和选项,请使用man nohup命令查看特定发行版的文档。

pgrep-通过进程名查找匹配的进程 ID

在Linux中,pgrep命令用于根据进程名或其他属性查找正在运行的进程,并返回与查询条件匹配的进程ID(PID)。它提供了一种简单的方式来查找进程,以便进行进一步的操作。下面是pgrep命令的一些常用用法和代表性示例:

  1. 根据进程名查找进程:

    pgrep firefox    # 查找名为firefox的进程
    

    这个命令将返回所有名为firefox的进程的PID。

  2. 根据完整的命令行查找进程:

    pgrep -f "python script.py"    # 查找运行命令行为"python script.py"的进程
    

    这个命令将返回所有正在运行命令行为"python script.py"的进程的PID。

  3. 根据用户查找进程:

    pgrep -u username    # 查找属于指定用户名的进程
    

    这个命令将返回属于指定用户名的所有进程的PID。

  4. 结合其他命令使用:

    kill $(pgrep -f "python script.py")    # 结合kill命令杀死指定命令行的进程
    

    这个命令将使用pgrep命令查找运行命令行为"python script.py"的进程,并将它们的PID传递给kill命令以终止这些进程。

注意:pgrep命令可以与其他命令结合使用,例如kill命令来终止进程,或者ps命令来获取进程的详细信息。建议使用man pgrep命令查看特定发行版的文档以了解更详细的用法和选项。

runlevel-显示当前运行级别

在Linux中,runlevel命令用于查看当前系统的运行级别。运行级别表示系统处于的操作模式,不同的运行级别对应着不同的服务和功能。下面是runlevel命令的一些常用用法和代表性示例:

  1. 查看当前运行级别:

    runlevel
    

    这个命令将显示当前系统的运行级别,通常以前面的字母表示。

  2. 查看先前的运行级别:

    runlevel -p
    

    这个命令将显示上次系统的运行级别和当前运行级别。

  3. 切换到单用户模式:

    telinit 1
    

    这个命令将切换系统到单用户模式,也称为维护模式。在这个模式下,只有root用户可以登录,系统中的多数服务将被停止。

  4. 切换到图形用户界面:

    telinit 5
    

    这个命令将切换系统到图形用户界面模式,也称为多用户图形模式。在这个模式下,系统将启动图形界面登录。

注意:runlevel命令需要root或具有sudo权限的用户才能运行。运行级别的配置和具体含义可能因Linux发行版而异,建议使用man runlevel命令查看特定发行版的文档以了解更详细的用法和运行级别定义。

init-系统初始化进程

在Linux中,init命令是一个特殊的进程,它是系统引导过程中的第一个进程(进程ID为1),负责初始化系统,并启动其他进程。init命令通常由系统引导程序(如GRUB)调用,以启动Linux系统。以下是init命令的一些常用用法和代表性示例:

  1. 切换运行级别:

    init 3    # 切换到文本模式运行级别
    

    这个命令将系统切换到文本模式运行级别,所有图形界面进程将被停止,并只保留基本的终端登录。

  2. 关闭系统:

    init 0    # 关闭系统
    

    这个命令将系统切换到关机运行级别,停止所有进程并关闭系统。

  3. 重启系统:

    init 6    # 重启系统
    

    这个命令将系统切换到重启运行级别,停止所有进程并重新启动系统。

  4. 单用户模式:

    init 1    # 切换到单用户模式
    

    这个命令将系统切换到单用户模式,只有一个控制台可用,并且只有root用户可以登录。

  5. 运行级别说明:

    init 5    # 切换到图形模式运行级别
    

    这个命令将系统切换到图形模式运行级别,启动图形界面并登录图形桌面环境。

注意:init命令需要root或具有sudo权限的用户才能运行。在使用init命令之前,请确保了解系统的运行级别配置和对应的操作。不同的Linux发行版可能具有不同的运行级别配置。建议在使用init命令之前备份重要的数据并谨慎操作。

service-管理系统服务

在Linux中,service命令用于管理系统服务,包括启动、停止、重启、查看状态等操作。它是一种通用的系统服务管理工具,适用于大多数Linux发行版。下面是service命令的一些常用用法和代表性示例:

  1. 启动一个服务:

    service serviceName start
    

    这个命令将启动指定的服务,其中serviceName是服务的名称。

  2. 停止一个服务:

    service serviceName stop
    

    这个命令将停止指定的服务,其中serviceName是服务的名称。

  3. 重启一个服务:

    service serviceName restart
    

    这个命令将重启指定的服务,其中serviceName是服务的名称。

  4. 查看服务的状态:

    service serviceName status
    

    这个命令将显示指定服务的当前状态,包括运行状态、PID(进程ID)等信息。

  5. 列出所有可用的服务:

    service --status-all
    

    这个命令将列出系统中所有可用的服务,并显示它们的状态。

  6. 启用服务的自动启动:

    service serviceName enable
    

    这个命令将配置指定的服务在系统启动时自动启动。

  7. 禁用服务的自动启动:

    service serviceName disable
    

    这个命令将配置指定的服务在系统启动时不自动启动。

注意:实际使用中,serviceName应替换为实际的服务名称,不同的Linux发行版可能有不同的服务命名约定。在具体操作时,请根据您的系统和服务进行相应的调整。建议使用man service命令查看特定发行版的文档以了解更详细的用法和选项。