linux命令nohup的使用,ps-aux

本文介绍了在Linux中使用nohup命令实现后台任务执行的方法,包括如何在退出终端后仍能保持进程运行,以及如何查看、管理后台进程。重点阐述了nohup命令的语法、使用场景和注意事项,并提供了在后台执行多个脚本的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux命令行中,如果某条命令需要执行的时间非常长,则可把该条命令放在后台执行,这样就可以继续在该命令行窗口干其他事情,同时不影响之前那条命令继续执行,linux中针对该问题有一个nohup的命令可实现。

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

语法:nohup Command [ Arg … ] [ & ]

描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。

如命令 nohup sh test.sh > test.log &

表示将脚本文件test.sh的执行放于后台,将test.sh中打印的信息转到test.log中,后面的&表示即使terminal(终端)关闭,或者电脑死机程序依然运行(前提是你把程序递交到服务器上); 

上述中,>test.log其实是1>test.log的缩写,表示的是将标准输出重定向到test.log文件中,使用2>error.log则表示将标准错误输出重定向到error.log文件中。

而0< 则是标准输入了。 

若是将上述命令写为nohup sh test.sh >test.log 2>&1 &

解释:最后的&已经在上面解释了,而2>&1则是表示把标准错误(2)重定向到标准输出中(1),而标准输出又导入文件test.log里面,所以最后的结果是标准错误和标准输出都导入文件test.log里面了。 

至于为什么需要将标准错误重定向到标准输出的原因,那就归结为标准错误没有缓冲区,而stdout有。 
如果写为:nohup sh test.sh >test.log 2>test.log ,文件test.log被两次打开,而stdout和stderr将会竞争覆盖,这肯定不是我门想要的。
这就是为什么有人会写成: 
nohup sh test.sh >test.log 2>test.log出错的原因了 
注意:如果在执行完nohup之后,直接按终端的关闭按钮关闭终端,则会导致断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。这样,nohup的进程就停止了。只有在执行nohup之后,按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端,该进程才会继续在后台执行。

退出状态:该命令返回下列出口值:

126 可以查找但不能调用 Command 参数指定的命令。

127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

当后台要执行多个脚本时,最好是每个窗口执行一个,若在同一个窗口执行,下个执行命令需要等待前面一个执行完成才能执行,

这种效率不是我们要的。

查看运行的后台进程

jobs   只能查看当前窗口的后台进程,如果关闭了后台执行脚本的窗口,该命令失效,这个时候就只能用到下面的命令查看

ps -ef    可以查看主机所有运行的进程   ps -ef | grep 过滤条件

也可以使用ps aux |grep 过滤条件

************************************************************************************

ps aux输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 
格式说明:
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
 
STAT: 该行程的状态,linux的进程有5种状态:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).
 
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
 
***************************************************************************************

fg %n将后台脚本调到前台执行

fg %n  将当前后台运行程序调到前台执行

如果执行完后台脚本命令,当前窗口没有关闭,可以执行jobs查看当前窗口运行的后台进程的进程号,再通过fg %n,将此后台进程调到前台执行,如果不想执行该脚本,直接ctl +c 关闭该窗口

终止后台运行的删除脚本

删除命令:kill -9  进程号

注意:删除的时候不能删除查找查找命令,否则会照成关机




<think>好的,用户问的是如何在Linux使用nohup执行多个命令。我需要结合之前的引用资料和系统指令来回答。首先,回顾引用中的内容,引用1和2提到了nohup的基本用法,通常和&结合使用。引用3给出了一个shell脚本的例子,里面用多个nohup命令来同时运行不同的Python脚本。引用4提到了运行jar包并重定向日志。 用户的需求是运行一系列命令,可能需要同时执行或者按顺序执行。首先,我需要明确两种情况:并行执行多个命令和顺序执行多个命令。对于并行,使用&让每个命令在后台运行,每个命令前加nohup。例如在shell脚本中每个命令都加上nohup和&,如引用3中的示例。这样每个命令都会独立在后台运行,并且输出到指定日志文件。 如果是顺序执行多个命令,比如一个命令执行完再执行下一个,但都需要在后台运行,可以用括号把命令组合起来,然后整体用nohup。例如nohup (cmd1 && cmd2 && cmd3) &,这样整个序列作为一个作业在后台运行,并且不受挂断影响。 另外,用户可能需要知道如何正确重定向输出,避免日志混乱。引用3和4中都有提到重定向输出到文件或/dev/null。比如每个命令的输出单独保存,或者合并到一个文件。同时需要注意错误输出的处理,使用2>来重定向错误。 还需要考虑是否使用脚本文件。引用3中的例子是通过shell脚本运行多个命令,这样可以方便管理。用户可能希望直接写命令或者使用脚本,需要都给出示例。 最后,要检查是否有语法错误,确保所有命令用正确的格式,比如使用&&连接顺序命令,&放在后台执行。同时,注意每个nohup命令的正确结构,比如nohup command > output.log 2>&1 &,这样同时处理标准输出和错误输出。 总结回答的结构:先介绍并行和顺序两种情况,给出具体示例,包括脚本方法和命令行方法,并说明输出重定向的处理。最后提醒用户检查进程和日志,确保命令正确执行。</think>### 如何在Linux中用nohup运行多个命令? 在Linux使用`nohup`运行多个命令主要有两种场景:**并行执行**和**顺序执行**,以下是具体实现方法: --- #### 一、并行执行多个命令 通过`nohup`结合`&`实现后台并行运行,每个命令单独处理输出。 **示例1:通过Shell脚本实现** 新建脚本文件(如`run_commands.sh`): ```bash #!/bin/bash nohup command1 > output1.log 2>&1 & nohup command2 > output2.log 2>&1 & nohup command3 > output3.log 2>&1 & ``` 运行脚本: ```bash chmod +x run_commands.sh ./run_commands.sh ``` **说明**: - `2>&1`表示将标准错误(stderr)重定向到标准输出(stdout)[^3] - `&`将命令置于后台运行 - 每个命令的日志单独保存,避免混杂[^4] --- #### 二、顺序执行多个命令 使用`&&`连接多个命令,整体交给`nohup`管理。 **示例2:单行命令组合** ```bash nohup (command1 && command2 && command3) > combined.log 2>&1 & ``` **说明**: - 使用`()`将多个命令合并为一个子进程 - 所有命令按顺序执行,任一命令失败则终止后续操作[^2] --- #### 三、其他注意事项 1. **输出重定向** - 若需忽略所有输出:`nohup command >/dev/null 2>&1 &` - 若需分离标准输出和错误:`nohup command >stdout.log 2>stderr.log &` 2. **进程查看** 使用`jobs -l`或`ps aux | grep command`验证后台进程状态[^1] 3. **终止后台进程** 通过`kill -9 PID`手动终止(PID通过`ps`命令获取) --- ### 示例场景 假设需要同时运行Python脚本和Java程序: ```bash #!/bin/bash nohup python3 script1.py > script1.log 2>&1 & nohup java -jar app.jar > app.log 2>&1 & ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值