nohup与&

在 Unix/Linux 系统中,nohup 命令和 & 符号都是用来在后台运行命令的工具,但它们有一些区别。

nohup

nohup 命令允许你在终端关闭之后继续运行进程。通常情况下,当你退出终端会话时,正在运行的进程会被挂断(SIGHUP 信号)。nohup 命令则会忽略 SIGHUP 信号,使得进程即使在终端关闭后也能继续运行。

& 符号

& 符号用来将命令放入后台运行。当你在命令后面加上 &,shell 会立即将该命令放入后台执行,并立即返回命令提示符,允许你执行其他命令。

区别

  1. 忽略 SIGHUP:
    nohup 命令会忽略 SIGHUP 信号,这意味着即使你在终端会话结束后,进程仍然可以继续运行。而使用 & 符号的命令不会忽略 SIGHUP 信号,除非你在 .bashrc 或其他 shell 配置文件中设置了忽略 SIGHUP 信号。

  2. 输出重定向:
    nohup 命令会自动将标准输出和标准错误输出重定向到一个名为 nohup.out 的文件中(除非你指定了其他文件)。而使用 & 符号的命令默认不会这样做,标准输出和标准错误输出仍然会被发送到终端。

使用示例

使用 nohup
nohup command arg1 arg2 > output.log 2>&1 &

这条命令会启动 command 并将输出重定向到 output.log 文件中。& 符号确保命令在后台运行。

使用 &
command arg1 arg2 > output.log 2>&1 &

这条命令同样会启动 command 并将输出重定向到 output.log 文件中,并在后台运行。

组合使用 nohup 和 &

你可以将两者结合起来使用,以确保进程在后台运行并且忽略 SIGHUP 信号:

nohup command arg1 arg2 > output.log 2>&1 &

在这种情况下,nohup 会忽略 SIGHUP 信号,& 会将命令放入后台执行。

示例代码

下面是一个具体的示例,展示如何使用 nohup& 来后台运行一个命令,并将输出重定向到一个文件中:

#!/bin/bash

# 使用 nohup 和 &
nohup ./your_command arg1 arg2 > output.log 2>&1 &

# 获取后台进程的 PID
echo $! > pid.txt

这段脚本会执行以下步骤:

  1. 使用 nohup 运行 your_command,并将标准输出和标准错误输出重定向到 output.log 文件中。
  2. 使用 & 符号将命令放入后台执行。
  3. 使用 echo $! 获取后台进程的 PID,并将其保存到 pid.txt 文件中。

总结

  • nohup 用于忽略 SIGHUP 信号,并且自动重定向输出。
  • & 用于将命令放入后台执行。

结合使用 nohup& 可以确保你的命令在后台运行,并且即使在终端会话结束后仍能继续执行。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值