Linux将正在运行的前台程序放到后台执行

这篇博客介绍了如何在Linux中将前台运行的命令转移到后台,以便在不影响任务执行的同时,可以及时与他人(如文中提到的女神)进行其他活动。通过Ctrl+z暂停命令,然后使用jobs和bg命令,可以将作业放到后台并继续执行,即使关闭终端也不会影响任务的运行。这样,你可以在不杀死进程的情况下,安心与女神共进午餐。
  • 工作中,我们执行一条命令或者脚本,
  • 本以为很快就能完成,但经常事与愿违!
  • 比如11:50我们执行了一条命令,以为3分钟搞定,
  • 搞定后就和女神一起共进午餐!
  • 可11:57了命令还没执行完!
  • 一边是女神焦急的等待,
  • 一边是连进度条都没有的 D状态进程!
  • 想想要不要killall -9,又下不去手~

只要会了这个骚操作,前台命令给它踢到服务器后台运行,女神不要走!

让作业运行于后台

  • 尚未启动的作业: COMMAND &

  • 运行中的作业: Ctrl+z 暂停作业

将前台运行命令踢到后台继续运行

  • 使用Ctrl+z将正在前台运行的命令暂停
  • 这时命令以暂停的状态被扔到了后台
  • 使用jobs命令可以查看后台作业情况
Ctrl+z ##按键盘上面的Ctrl键和z键
jobs ## 查看后台进程编号

踢后台

  • 使用bg命令让程序在后台继续运行
    bg [作业编号]
    
    后台运行
    • bg命令
    [11:22:13 rooter@C8-3-55 ~]#bg --help
    bg: bg [任务声明 ...]
     移动任务至后台。
     
     将 JOB_SPEC 标识的任务放至后台,就像它们
     是带 `&' 启动的一样。如果 JOB_SPEC 不存在,shell 观念中的
     当前任务将会被使用。
    
    至此,我们的前台程序已经被踢到服务器后台并继续运行了!

关掉终端开心的和女神去恰饭吧!

  • 关闭终端pts/0
    关闭终端1
  • 在另一个终端pts/1中查看,任务仍在后台执行
    任务没有受到终端推出的影响
    另一个终端查看觉得管用的,别忘记下方一键三连呦!
<think>我们正在处理用户的问题:"我想将正在运行Linux程序移动到后台执行" 根据用户的问题,我们需要提供将正在运行Linux程序移动到后台执行的方法。 在Linux中,将正在运行程序移动到后台通常涉及以下步骤: 1. 暂停当前正在前台运行程序(如果它正在运行)。 2. 使用bg命令将其放入后台运行。 但是,用户可能已经启动了一个程序,而没有使用&(后台启动)或nohup(忽略挂断信号)。因此,我们需要告诉用户如何将已经在前台运行程序放入后台。 具体步骤: 1. 在运行程序的终端中,按下Ctrl+Z。这将暂停该程序(发送SIGTSTP信号)。 2. 然后,使用命令`bg`将暂停的程序后台继续运行(发送SIGCONT信号)。 另外,如果用户希望程序后台运行并且不受终端关闭的影响(即忽略SIGHUP信号),可以使用`disown`命令或者使用`nohup`启动程序。但这里用户是已经运行程序,所以可以使用`disown`。 另一种方法是使用`jobs`命令查看作业号,然后使用`bg %n`(n为作业号)将作业放入后台运行。 注意:如果用户关闭终端,即使程序后台,也可能会收到SIGHUP信号而终止。为了避免这种情况,可以使用`disown`命令将作业从当前shell的作业表中移除,这样终端关闭时就不会发送SIGHUP信号给该作业。 参考引用: 引用[2]提到了在ssh中运行后台任务,当退出时,如果使用&启动,bash退出时会发送SIGHUP给进程组,导致进程终止。而使用nohup可以避免。 引用[3]展示了jobs -l命令的输出,可以看到后台作业的状态(停止、运行等)。 因此,我们可以给出以下步骤: 步骤1:使用Ctrl+Z暂停前台程序。 步骤2:使用bg命令让程序后台继续运行。 步骤3(可选):使用disown命令将作业从作业表中移除,这样即使终端关闭,程序也不会终止。 另外,如果程序已经启动,我们也可以使用其他方法,比如使用screen或tmux等终端复用器,这样即使断开连接,程序也会继续运行。 但是,用户的问题只是“移动到后台”,所以我们先给出基本方法。 示例: 假设我们运行了一个长时间运行程序,比如`sleep 1000`,然后我们按下Ctrl+Z,它会显示: [1]+ Stopped sleep 1000 然后,我们输入: $ bg %1 或者直接输入`bg`(因为%1是当前作业) 它会显示: [1]+ sleep 1000 & 这样,程序就在后台运行了。 如果希望程序在终端关闭后继续运行,可以执行: $ disown %1 这样,这个作业就被从作业表中移除,并且终端关闭时不会发送SIGHUP信号给它。 另外,如果用户想要在启动程序时就放到后台,可以使用`&`,例如: $ sleep 1000 & 或者使用nohup: $ nohup sleep 1000 & 但是用户的问题是关于已经运行程序。 因此,我们的回答将包括: 1. 使用Ctrl+Z暂停程序。 2. 使用bg命令让程序后台继续运行。 3. 使用disown命令使程序与终端脱离(可选)。 同时,我们也可以提到使用screen或tmux作为替代方案,这样更灵活。 生成相关问题: 1. 如何将后台程序带回前台? 2. 如何让程序在退出终端后继续运行? 3. 如何查看当前的后台作业? 根据引用[3],我们可以使用`jobs -l`查看后台作业。 下面组织回答:</think>### 将正在运行Linux 程序移动到后台执行的方法 #### 1. **暂停程序并移至后台** - 在程序运行前台终端中按 `Ctrl + Z`,程序会立即暂停并显示作业号(如 `[1]+ Stopped`)。 - 输入 `bg %n`(`n` 为作业号),程序将在后台继续运行: ```bash # 示例:暂停后启动后台运行 [1]+ Stopped sleep 1000 # 按 Ctrl+Z 后 $ bg %1 # 程序后台继续运行 [1]+ sleep 1000 & ``` #### 2. **直接切换运行状态(无需暂停)** - 若程序已在运行,按 `Ctrl + Z` 暂停后,可直接用 `&` 符号唤醒到后台: ```bash $ fg %n & # 将作业 n 唤醒到后台 ``` #### 3. **脱离终端控制(避免关闭终端时被终止)** - 使用 `disown` 移除作业与终端的关联,即使关闭终端程序仍继续运行: ```bash $ disown %n # 移除作业 n ``` - 或启动时直接使用 `nohup`: ```bash $ nohup ./program & # 忽略 SIGHUP 信号 ``` #### 4. **查看后台作业** - `jobs -l` 显示所有后台作业的 PID 和状态: ```bash $ jobs -l [1]- 9154 Stopped vim # 暂停状态 [2]+ 9368 Running find / -print & # 后台运行中 ``` #### ⚠️ 注意事项 - **后台程序仍受终端限制**:若未用 `nohup` 或 `disown`,关闭终端会发送 `SIGHUP` 信号终止程序[^2]。 - **输入/输出重定向**:后台程序若需输入会暂停,建议用重定向(如 `./program > log.txt 2>&1 &`)。 --- ### 相关问题 1. 如何将后台程序带回前台执行? 2. `nohup` 和 `disown` 在脱离终端控制时有何区别? 3. 如何查看后台程序的实际资源占用(如 CPU、内存)? 4. 终端关闭后,如何重新连接已脱离的后台程序? [^1]: `jobs -l` 可显示后台作业的 PID 和状态[^3]。 [^2]: 未脱离终端的后台程序会在终端关闭时被终止[^2]。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值