Linux应用程序后台运行

本文介绍了在Unix/Linux环境下如何使程序在后台运行的方法,包括使用&和nohup命令的具体操作步骤及注意事项。

Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:

/usr/local/mysql/bin/mysqld_safe --user=mysql &

但是加入我们很多程序并不象mysqld一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用 & 结尾,

无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。

如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。

如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

退出状态

该命令返回下列出口值:

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

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

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

示例

要运行注销后后台中的命令,请输入:

$ nohup find / -print &

输入该命令后,显示如下:

670$ 输出发送到 nohup.out

进程 ID 号更改为 & (表示“and”的符号)启动的后台进程的 ID 号。

消息 输出发送到 nohup.out 通知您来自 find / -print 命令的输出在 nohup.out 文件中。

查看这些消息后可以注销,即使 find 命令仍在运行。

要运行后台中的命令并且把标准输出重定向到一个不同的文件,请输入:

$ nohup find / -print >filenames &

本例运行 find / -print 命令并且把输出存储到命名为 filenames 的文件中。现在只显示进程 ID 和提示:

677$

因为 nohup 命令需要片刻时间来启动 Command 参数指定的命令,在注销前请等待。

如果太快注销,Command 参数指定的命令可能根本没运行。一旦 Command 参数指定的命令启动,注销就不会对其产生影响。

要运行不止一条命令,请使用 shell 过程。例如,如果写 shell 过程:

neqn math1 | nroff > fmath1

且命名它为  nnfmath1 文件,那么可以为 nnfmath1 文件中所有命令运行 nohup 命令,命令为:

nohup sh nnfmath1

如果给 nnfmath1 文件分配执行许可权,那么可以通过发出如下命令得到相同的结果:

nohup nnfmath1

要在后台中运行 nnfmath1 文件,请输入:

nohup nnfmath1  &

要在 Korn shell 中运行 nnfmath1 文件,请输入:

nohup ksh nnfmath1

### 如何在 Linux 服务器上让程序在后台运行Linux 中,有多种方法可以让程序在后台运行。以下是几种常见的实现方式: #### 使用 `&` 符号 通过在命令后面加上 `&` 符号,可以将进程放到后台执行[^2]。这种方式简单易用,适合短期运行的任务。 ```bash my_program & ``` 此操作会立即返回提示符,允许用户继续输入其他命令。需要注意的是,如果关闭终端,该任务可能会被终止,除非采取额外措施防止这种情况发生。 #### 使用 `nohup` 命令 为了确保即使退出登录或关闭终端,程序仍然能够持续运行,可以使用 `nohup` 命令[^3]。它会忽略挂起信号 (SIGHUP),从而保持程序的正常工作状态。 ```bash nohup my_program > output.log 2>&1 & ``` 上述命令中的重定向部分 (`> output.log 2>&1`) 将标准输出和错误消息保存到文件中以便后续查看。 #### 利用 Screen 或 Tmux 工具 对于更复杂的场景或者需要重新连接至已启动的应用场合,则推荐采用 GNU Screen 或 tmux 这类工具来创建分离式的 shell session[^4]。这样即便断开了当前 SSH 连接,session 及其内部运行的所有应用程序都不会受到影响。 安装并初始化 screen 后可按如下方式进行操作: ```bash screen -S my_session_name # 在这里启动您的应用... Ctrl+A D # 脱离当前屏幕会话但保留其中活动的内容 ``` 同样适用于 tmux 的基本流程为: ```bash tmux new -s my_session_name # 执行所需指令.... tmux detach # 按快捷键组合 Ctrl+B 再按下 d 键即可脱离 ``` #### 设置守护线程/服务 当涉及到长期稳定的服务型软件部署时,考虑将其作为系统级服务管理更为合适。这通常涉及编写 systemd service 文件或将逻辑嵌入到特定框架里完成自动化加载与监控功能[^5]。 例如定义一个新的 Systemd Service Unit File `/etc/systemd/system/myprogram.service`: ```ini [Unit] Description=My Program Daemon After=network.target [Service] ExecStart=/path/to/my_program Restart=always User=nobody Group=nogroup Environment="VAR_NAME=value" [Install] WantedBy=multi-user.target ``` 之后启用并启动服务: ```bash systemctl enable myprogram systemctl start myprogram ``` 以上介绍了四种主要途径用于实现在 Linux 平台上使某个程序于背景模式下运作的方法,并且每种都有各自适用范围以及优缺点所在。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值