Shell后台运行

本文深入解析了Linux环境下后台命令执行的方法,包括如何使用Ctrl+z将命令放入后台并暂停,如何通过jobs命令查看后台作业,以及如何使用fg、bg命令将后台命令调至前台或唤醒。此外,还详细介绍了Nohup命令的用途和用法,解释了其如何实现程序在注销后仍能继续运行,并讨论了Nohup命令的退出状态。
1. & 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
2. ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
3. jobs
查看当前有多少在后台运行的命令
4. fg
将后台中的命令调至前台继续运行  
如果后台 中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)5. bg 将一个在后台暂停的命令,变成继续执行如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
1. jobs列举出后台作业信息。([作业号]   运行状态   作业名称)
2. ctrl+z 将任务放到后台去,并暂停;
3. bg  <%int> 将后台任务唤醒,在后台运行;

4. fg   <%int> 将后任务的程序放到前台;



另外,如果希望运行的程序永远不退出,可以使用nohup命令,具体方法是:

nohup命令参考

nohup 命令

  用途:不挂断地运行命令。

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

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

  无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

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

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

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

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

<think>我们正在回答用户的问题:如何在shell中让sh脚本后台运行? 根据用户提供的引用内容,我们有几种方法可以实现后台运行: 1. 使用 & 符号:直接在命令后添加 &,使脚本在后台运行。 2. 使用 nohup 命令:可以在退出终端后继续运行,并且输出重定向到nohup.out文件。 3. 使用 systemd 服务:创建服务单元文件,通过系统服务管理后台运行。 下面我们详细说明每种方法: </think> ### 如何在 Shell 中让 .sh 脚本后台运行 在 Linux/Unix 环境中,让脚本后台运行主要有以下三种常用方法: --- #### 方法 1:使用 `&` 运算符(临时后台运行) 在命令末尾添加 `&` 符号,脚本会立即进入后台运行: ```bash ./your_script.sh & # 直接后台运行 ``` **特点**: - 立即返回控制台,输出仍显示在当前终端 - **终端关闭时脚本会终止** - 适合临时任务,如: ```bash # 启动后台任务并记录PID ./data_processor.sh > output.log 2>&1 & echo "后台任务PID: $!" ``` --- #### 方法 2:使用 `nohup`(终端关闭后持续运行) 结合 `nohup` 命令可让脚本在退出终端后继续运行: ```bash nohup ./your_script.sh & # 脱离终端后台运行 ``` **特点**: - 自动重定向输出到 `nohup.out` 文件 - **终端关闭后脚本仍持续运行** - 可自定义输出文件: ```bash nohup ./server.sh > server.log 2>&1 & ``` --- #### 方法 3:创建 systemd 服务(系统级后台运行) 通过 systemd 实现开机自启和进程管理: 1. 创建服务文件: ```bash sudo nano /etc/systemd/system/myscript.service ``` 2. 写入配置: ```ini [Unit] Description=My Background Script # 服务描述 [Service] ExecStart=/path/to/your_script.sh # 脚本绝对路径 Restart=always # 崩溃自动重启 User=your_username # 运行用户 [Install] WantedBy=multi-user.target # 多用户模式启动 ``` 3. 启用服务: ```bash sudo systemctl daemon-reload sudo systemctl start myscript # 启动服务 sudo systemctl enable myscript # 开机自启 ``` --- ### 方法对比表 | 方法 | 终端关闭后存活 | 输出管理 | 适用场景 | |-------------|----------------|----------------|----------------------| | `&` | ❌ | 显示在当前终端 | 临时任务 | | `nohup` | ✔️ | 保存到文件 | 长期运行任务 | | `systemd` | ✔️ | 日志系统管理 | 生产环境服务/守护进程 | --- ### 实践建议 1. **基础任务**:使用 `nohup` + 日志重定向: ```bash nohup ./monitor.sh > /var/log/monitor.log 2>&1 & ``` 2. **关键服务**:使用 systemd 确保高可用性 3. **查看后台任务**: ```bash jobs -l # 查看当前会话后台任务 ps aux | grep your_script # 全局查找进程 ``` 4. **终止后台任务**: ```bash kill %1 # 终止 jobs 列表中的1号任务 kill -9 <PID> # 强制终止指定PID进程 ``` > 通过合理选择后台运行方式,可确保脚本在脱离终端后持续执行,同时便于日志收集和进程管理[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值