后端开发从小白到大佬之Linux的命令(一):nohup,详解底层!!!

本文介绍了Linux中的nohup命令,包括其基本语法、原理、如何查看和关闭进程,以及如何使用ps、grep、kill和pkill等工具配合nohup。重点讲解了nohup如何在后台运行命令并持久化输出,以及进程分离和输出重定向的机制。
摘要由CSDN通过智能技术生成


在这里插入图片描述

nohup

nohup命令初识

在 Linux 中,nohup 命令 用于在后台运行命令并将其输出重定向到一个文件中,即使退出终端或关闭会话,该命令也能够持久的运行。 通常情况下,我们使用 nohup 命令来运行那些需要较长时间才能完成的任务,或者需要在长时间运行的过程中保持连接的任务,我们java的jar包就是一个很好的选择。

nohup命令语法

语法:

nohup command [arg...] [arg &]
  • command :是要运行的命令及其参数,
  • & :可以让命令在后台运行
  • nohup 命令会将命令的输出转向到一个名为 nohup.out 的文件中。这个是默认的日志命令,可以通过tail -f nohup.out查看
  • 如果您不想将输出重定向到 nohup.out 文件,您可以使用 >>> 运算符将输出重定向到其他文件中。
nohup java -jar xxx.jar > nohup.out &

nohup的原理

nohup 命令的原理是 将要执行的命令与当前终端会话进行分离,使其脱离终端的控制,并在后台持续运行。它实际上是使用了两个关键技术:进程分离和输出重定向。

  1. 进程分离:nohup 命令使用了 forkexec 系统调用来创建一个子进程,并使子进程成为一个新的会话组的领导者。 这样可以使子进程与终端断开关联,进程不再受到终端关闭或用户注销的影响。
  2. 输出重定向:nohup 命令将子进程的标准输出(STDOUT)和标准错误输出(STDERR)重定向到一个文件中,默认情况下是 nohup.out 文件。这样即使终端关闭,命令的输出依然可以写入到文件中。

同时需要注意以下几点:

  • 当使用 nohup 命令运行一个程序时,该程序的标准输入(STDIN)将会被关闭。因此,如果程序需要从标准输入读取数据,可能需要通过其他方式提供输入。
  • nohup 命令执行时,会产生一个 子进程,可能会导致一些资源的占用。如果运行的是占用资源较多的程序,需要注意系统的负载情况。
  • nohup 命令并不会使命令变为守护进程(daemon process)。如果您希望在系统启动时自动运行某个命令,并将其作为守护进程运行,可以考虑使用其他工具,如 systemdinit.d

如何查看nohup的进程

ps | grep

使用 ps 命令结合 grep 过滤器来查找包含特定关键词的进程。例如,使用以下命令可以查找包含关键词 “nohup” 的进程:

ps -ef | grep nohup

该命令将显示与 “nohup” 相关的进程列表。

pgrep

可以使用 pgrep 命令以及进程的名称或其他标识符来查找匹配的进程。例如,使用以下命令可以查找根据进程名称 “your_process_name” 执行的进程:

pgrep -l your_process_name

jobs

jobs 是一个用于查看当前终端会话中正在运行的作业(job)的命令。作业指的是在前台或后台运行的进程或命令。

使用 jobs 命令可以列出当前终端会话中的作业,并显示作业的编号和状态信息。以下是 jobs 命令的基本用法:

jobs [options]

常用的选项包括:

  • -l:显示详细信息,包括作业编号、进程 ID 和作业状态。
  • -n:只显示最近创建的未通知作业。
  • -p:只显示进程 ID。
  • -r:只显示运行中的作业。
  • -s:只显示停止的作业。

示例用法:

$ sleep 60 &  # 在后台运行 sleep 命令
[1] 12345

$ jobs
[1]+  Running                 sleep 60 &

在上面的示例中,sleep 60 命令被放到后台运行,并显示了作业编号 [1]、进程 ID 12345 和作业状态 Running

pu -ux

ps -ux 是一个常用的 Linux 命令,用于显示当前系统中运行的进程的详细信息。下面是 ps -ux 命令的解释:

ps -ux
  • -u 选项用于显示与当前用户相关的进程信息。
  • -x 选项用于显示没有控制终端的进程。

该命令将显示包括以下列在内的进程列表:

  • USER:进程所属的用户名。
  • PID:进程的 ID。
  • %CPU:进程使用的 CPU 百分比。
  • %MEM:进程使用的内存百分比。
  • VSZ:进程使用的虚拟内存(以 KB 为单位)。
  • RSS:进程使用的实际物理内存(以 KB 为单位)。
  • TTY:进程所关联的终端。
  • STAT:进程的状态(R 表示运行,S 表示睡眠,Z 表示僵尸等)。
  • START:进程启动的时间或日期。
  • TIME:进程消耗的 CPU 时间。
  • COMMAND:启动进程的命令或可执行文件的名称。

示例输出如下:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 168872  9096 ?        Ss   2023   0:05 /sbin/init
root         2  0.0  0.0      0     0 ?        S    2023   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        I<   2023   0:00 [rcu_gp]
...

注意,ps -ux 命令会列出所有正在运行的进程的信息,包括系统进程和其他用户的进程。如果想要限制输出只显示与当前用户相关的进程,可以结合使用 grep 命令进行过滤。例如:

在这里插入图片描述

如何关闭进程

kill

使用kill命令关闭进程。kill命令用于向进程发送信号,可以用来终止一个进程。首先需要找到要关闭的进程的进程ID(PID),可以使用ps命令或者top命令来查看所有正在运行的进程。然后使用kill命令加上进程ID来关闭进程。例如,要关闭进程ID为1234的进程,可以运行以下命令:

kill 1234

默认情况下,kill命令发送的是SIGTERM信号,这是一个终止进程的常规信号。如果进程不响应SIGTERM信号,可以使用kill命令加上-9选项来发送SIGKILL信号,强制终止进程。例如:

kill -9 1234

pkill

使用pkill命令关闭进程。pkill命令可以根据进程的名称或者其他属性来关闭进程。例如,要关闭名称为"process_name"的进程,可以运行以下命令:

pkill process_name

默认情况下,pkill命令发送的是SIGTERM信号,可以使用-9选项来发送SIGKILL信号,强制终止进程。

使用killall命令关闭进程。killall命令可以根据进程的名称来关闭进程。例如,要关闭名称为"process_name"的进程,可以运行以下命令:

killall process_name

默认情况下,killall命令发送的是SIGTERM信号,可以使用-9选项来发送SIGKILL信号,强制终止进程。

结尾

恭喜小伙伴完成本篇文章的学习,相信文章的内容您已经掌握得十分清楚了,如果您对工作技巧的知识十分好奇,请接下来跟着学习路径完成相关的学习哦,相信你会做到的~~~

↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

darr; ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木 木 水.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值