You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置^Z(Control-Z)挂起进程时直接输出被停止进程的PID

实现Control-Z挂起进程时直接显示PID的配置方法

问题复现

执行bash test.sh启动脚本后按下Control+Z组合键,默认终端输出如下,不直接展示被挂起进程的PID:

^Z
[1]+  Stopped                 bash test.sh

常规需要额外执行ps $(jobs -p)才能获取对应PID,可通过以下配置实现挂起瞬间直接打印PID。

推荐配置方案(最贴合需求)

方案保留默认Control-Z的挂起逻辑,仅追加PID打印输出,不会影响原有作业控制(jobs、fg、bg等命令均可正常使用):

  • 第一步:编辑当前用户的bash配置文件,执行命令:
vim ~/.bashrc
  • 第二步:将以下配置追加到文件末尾:
# 自定义Control-Z挂起逻辑,自动输出被挂起进程PID
ctrlz_suspend() {
    # 给当前前台进程组发送SIGTSTP信号,和默认Ctrl+Z行为完全一致
    kill -TSTP -- -$(ps -o pgid= $$ | tr -d ' ') 2>/dev/null
    # 短暂等待进程状态更新
    sleep 0.1
    # 读取最新被挂起进程的PID
    local spid=$(jobs -p | tail -n1)
    [ -n "$spid" ] && echo -e "\n*被挂起进程PID: $spid*"
}
# 取消默认的Ctrl+Z挂起按键绑定
stty susp undef
# 将Ctrl+Z绑定到自定义函数
bind -x '"\C-z": ctrlz_suspend'
  • 第三步:执行以下命令让配置立即生效:
source ~/.bashrc

配置生效后,再按Control+Z挂起前台进程,输出效果如下:

^Z
*被挂起进程PID: 26729*
[1]+  Stopped                 bash test.sh

轻量替代方案

如果不想修改按键绑定,也可以通过配置提示符触发命令,在每次回到命令行时自动打印带PID的作业列表:

  • 编辑~/.bashrc,追加以下内容:
# 每次输出命令提示符前,打印带PID的作业列表
PROMPT_COMMAND='jobs -l'
  • 执行source ~/.bashrc生效。
    该方案的缺点是默认的无PID挂起提示仍然会显示,带PID的作业信息会在进程挂起后、首次出现命令提示符时展示。

内容的提问来源于stack exchange,提问作者user19264607

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:09:23