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
命令的原理是 将要执行的命令与当前终端会话进行分离,使其脱离终端的控制,并在后台持续运行。它实际上是使用了两个关键技术:进程分离和输出重定向。
-
进程分离:
nohup
命令使用了fork
和exec
系统调用来创建一个子进程,并使子进程成为一个新的会话组的领导者。 这样可以使子进程与终端断开关联,进程不再受到终端关闭或用户注销的影响。 -
输出重定向:
nohup
命令将子进程的标准输出(STDOUT)和标准错误输出(STDERR)重定向到一个文件中,默认情况下是nohup.out
文件。这样即使终端关闭,命令的输出依然可以写入到文件中。
同时需要注意以下几点:
- 当使用
nohup
命令运行一个程序时,该程序的标准输入(STDIN)将会被关闭。因此,如果程序需要从标准输入读取数据,可能需要通过其他方式提供输入。 -
nohup
命令执行时,会产生一个 子进程,可能会导致一些资源的占用。如果运行的是占用资源较多的程序,需要注意系统的负载情况。 -
nohup
命令并不会使命令变为守护进程(daemon process)。如果您希望在系统启动时自动运行某个命令,并将其作为守护进程运行,可以考虑使用其他工具,如systemd
或init.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信号,强制终止进程。
结尾
恭喜小伙伴完成本篇文章的学习,相信文章的内容您已经掌握得十分清楚了,如果您对工作技巧的知识十分好奇,请接下来跟着学习路径完成相关的学习哦,相信你会做到的~~~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓文章来源:https://www.toymoban.com/news/detail-836684.html
darr; ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓文章来源地址https://www.toymoban.com/news/detail-836684.html
到了这里,关于后端开发从小白到大佬之Linux的命令(一):nohup,详解底层!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!