linux中如何后台运行一个命令并获取它的进程号
如果你只是想简单的后台挂起一个命令你可以在末尾加一个就可以了如下your_commandecho$!这种写法中是依靠了在shell中可以并行所有命令或者说是立刻释放左侧命令对shell的控制权从而让shell立刻去执行右侧命令的能力。而$!可以获取最后一个被放入后台执行的命令所对应的进程ID注意是最后一个后台执行的进程ID也就是说如果你写sleep 5 sleep 1那么$!获取到的是sleep 5的进程而不是sleep 1的如果你直接写sleep 5$!获取不到任何东西。并且当你断开SSH连接或者触发资源回收时这个后台进程如果还存在会被回收因此当在写一个设计持有化服务的脚本要注意服务的生命周期以及明确的获取到服务的进程号这种情况建议你使用nohup、ps、pgrep、相互配合nohup的作用是包裹所负责的命令使得进程忽略内核传递的SIGHUP信号。ps或者pgrep负责查询服务进程ID例如如下脚本#!/bin/bash#例如有一个脚本后台启动了一个叫做test的进程nohup/opt/test.sh#如果你希望在前台输出准确进程id就用ps直接解析ps-aux|greptest|grep-vgrep|awk{print $2}#但是awk的结果不能在管道中直接写入文件执行会有问题所以你可以用pgreppgrep-ftest/opt/out下面用一个例子来解释 nohup 到底是干了什么----------这里启动一个1000秒的后台进程nohup会在内核中立刻启动一个进程随后在内核中通过signal(SIGHUP, SIG_IGN)让这个进程自身忽略停止信号随后execvp(command, args)复用进程执行用户本来的命令这里任然需要使得进程放入后台[rootnode1 wy]# nohup sleep 1000 [1]40832[rootnode1 wy]# nohup: ignoring input and appending output to ‘nohup.out’--------------直接在bash中使用这里要回车一下 --------------此时获取$!拿到的就是包含这个命令的进程[rootnode1 wy]# echo PID: $!PID:40832------------查询进程看到PID是获取到的40832而PPID是当前SSH连接的会话[rootnode1 wy]# ps -ef | grep sleeproot4083214349013:39 pts/1 00:00:00sleep1000root4084414349013:39 pts/1 00:00:00grep--colorautosleep[rootnode1 wy]# ps -ef | grep 14349root143499810011:19 pts/1 00:00:00-bashroot4083214349013:39 pts/1 00:00:00sleep1000root4085514349013:40 pts/1 00:00:00ps-efroot4085614349013:40 pts/1 00:00:00grep--colorauto14349---------------断开这次会话连接触发内核的资源回收后再新建一个会话连接查询会发现这个进程本身忽略了资源回收的停止信号从而交给了顶级进程[rootnode1 ~]# ps -ef | grep sleeproot408321013:39 ? 00:00:00sleep1000root4091340886013:40 pts/1 00:00:00grep--colorautosleep从上面的用例中可以发现 nohup 使得进程忽略中断信号并不是立刻就发生的它其实是在父进程消失后让当前进程变成了一个没有血缘的僵尸进程这些进程会被 init 也就是内核初始化进程管理并负责回收使用ps -aux或者ps -ef在获取进程id上都可以参数的区别是其他细节输出不同而已但是要注意的是pgrep -f命令输出的进程条数很可能会有多条这是因为-f做模糊匹配的时候会把所有有关键字的进程全部搜索出来所以它的结果里面会有grep本身的进程号等如果你需要精确的进程号就要用ps进一步解析了比如如下脚本#!/bin/bashtmp#使用 $() 和 拼接结果字符串 的方式找到所有需要的进程idtmp$(ps-aux|grepmetastore|grep-vgrep|awk{print $2})#分割两个命令的结果tmp tmp$(ps-aux|grephiveserver2|grep-vgrep|awk{print $2})#将进程id拆成数组readarray-tADDR$(echo$tmp|tr \n)tmp#遍历数组kill进程foridsin${ADDR[]};dokill-9$idsechokill run-id by$idsdone最后要说一个误区nohup只负责委派不负责自动放在后台比如如下nohup$REDIS_HOME/bin/redis-server$REDIS_HOME/redis.confecho测试输出$!上面这个写法会出现很多不对劲的问题比如进程不退出等等总之这就是一个错误的写法不要这样用此外原则上nohup 它保障了负责进程的生命周期不被自动回收但在实际使用中最好控制到二进制命令或者说是保障调用命令的原子性实在有需要每一层父子命令都应该使用 nohup

相关新闻

【数学】P9667 [ICPC2022 Jinan R] Tower|普及+

【数学】P9667 [ICPC2022 Jinan R] Tower|普及+

本文涉及知识点 数学 [ICPC2022 Jinan R] Tower 题面翻译 题目描述 庞教授搭了 nnn 座不同高度的塔。第 iii 座塔的高度是 aia _ {i}ai​。 寿教授不喜欢这些参差不齐的塔。他决定先去掉它们中的 mmm 座,然后执行以下操作中的一些(或不执行&#x…

2026/10/9 1:23:57 阅读更多 →
游戏引擎对象与资源解耦设计实战:稳快省三原则

游戏引擎对象与资源解耦设计实战:稳快省三原则

1. 这不是教科书,是引擎开发现场的“对象-资源”生死线你写完一个角色类,new 出来扔进场景,跑两帧就卡顿;美术塞进来的20482048贴图,加载时内存暴涨300MB,然后在低端机上直接OOM崩溃;策划改了十…

2026/10/9 1:23:56 阅读更多 →
我的另一端使用RS422,我使用usb转接485的转接器,结果我只能接入收的线,如果接入发的线,则接收的字节流出现错误,后来改成usb转接422的转接器,收发都正常了。

我的另一端使用RS422,我使用usb转接485的转接器,结果我只能接入收的线,如果接入发的线,则接收的字节流出现错误,后来改成usb转接422的转接器,收发都正常了。

你帮我重新描述下我的提问,我觉得用词不太好对端是 RS-422 四线全双工设备。我先用 USB 转 RS-485 连接,只接对端发送差分线时 PC 能正常接收;再把对端接收差分线也接上后,PC 接收数据就出错。改用 USB 转 RS-422 后收发正常。请问…

2026/10/9 1:23:56 阅读更多 →

最新新闻

Red Mad Robot(red_mad_robot)Робопрактика 前端测试任务:用 React 构建员工社交网络用时统计表格

Red Mad Robot(red_mad_robot)Робопрактика 前端测试任务:用 React 构建员工社交网络用时统计表格

教程 【免费下载链接】ru-test-assignments Тестовые задания для самостоятельного выполнения от разных it компаний 项目地址: https://gitcode.com/gh_mirrors/ru/ru-test-assignments 点击查看 …

2026/10/9 1:53:16 阅读更多 →
纯血鸿蒙适配实战:工业IDE ETest的驱动重构与性能验证

纯血鸿蒙适配实战:工业IDE ETest的驱动重构与性能验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:53:16 阅读更多 →
Agent Skills实战:从概念到落地,打造模块化AI智能体技能库

Agent Skills实战:从概念到落地,打造模块化AI智能体技能库

“skills”这个词单看很抽象,但在2025年下半年AI Agent的开发语境里,它已经成了和“MCP”并列的热门关键词。如果你关注过Claude最近的更新,一定见过Agent Skills这个新概念——它本质上是把一组针对特定任务的指令、脚本和上下文打包成一个可…

2026/10/9 1:53:16 阅读更多 →
半导体工控机选型:五大场景拆解,高配机为何覆盖不了?

半导体工控机选型:五大场景拆解,高配机为何覆盖不了?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:53:16 阅读更多 →
树莓派+Claude打造具身智能机器人:硬件选型与实操避坑指南

树莓派+Claude打造具身智能机器人:硬件选型与实操避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 1:53:16 阅读更多 →
Gemini对话、AI历史搜索、DevTools AI一网打尽:enable-chrome-ai解锁的3大Chrome隐藏功能实测

Gemini对话、AI历史搜索、DevTools AI一网打尽:enable-chrome-ai解锁的3大Chrome隐藏功能实测

Gemini对话、AI历史搜索、DevTools AI一网打尽:enable-chrome-ai解锁的3大Chrome隐藏功能实测 【免费下载链接】enable-chrome-ai Enable Gemini in Chrome, AI Powered History search, DevTools Al Innovations in Google Chrome without cleaning data and reins…

2026/10/9 1:52:15 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →