bash shell获取进程的pid
来源:互联网 发布:淘宝粉红色高跟鞋 编辑:程序博客网 时间:2024/05/22 04:30
前几天在写一个脚本时在获取进程的pid时出现了一点点意外,当时的情境大概是这样的:跑一个任务A,然后任务B要监控A的状态,一旦A结束,B也要结束。当初第一反应就是获取B的pid然后判断A是否在运行,如果没有则kill掉B。可是当初就是不成功(用的是 $!),于是迫于任务紧急换了一种笨方法:让B的运行时间稍长于A任务(A任务的时间可以估算出来),于是就这样傻缺的开始了这个任务。
今天再一次有同样的需求,于是下定决心要弄明白上次为什么失败。后来终于发现了原因:当我们获取一个进程的pid时有一个最重要的条件:这个进程必须存在。当初大概的做法是这样的:
command A
comand B
pid=$!
if A is not exists
kill $pid
结果发现A运行完了但是B还在跑,那么这是什么原因呢?
因为command B 这种是阻塞式的命令,所以在B一直运行期间就将pid=$!阻塞住了,因此直到B运行完了pid=$!才能执行,而此时B已经运行完了,所以得到B的进程pid也就没有实际意义,因此最后pid的值实际上就是空了,因此接下来的kill $pid自然也就失败了。因此我们需要做的是command B&,让这个命令在后台运行,因此也就能让pid=$!执行,这样也就得到了上一个进程的pid。
另外如果要获得一个当前脚本的进程号可以使用$$。
这几天写脚本比较多,也出了很多错,总结起来就是bash shell脚本很容易因为细节问题而导致你意想不到的结果,因此在真正跑任务之前一定要模拟一点数据进行实践,否则等你期待的去分析脚本的结果时你会发现之前的白费功夫,浪费时间~
- bash shell获取进程的pid
- 交互式 Bash Shell 获取进程 pid
- linux命令(26):Bash Shell 获取进程 PID
- shell获取上一个进程的PID
- 在shell中获取其他进程的pid
- shell 编程8 获取 java程序的pid 杀死pid 对应的进程
- linux shell 根据进程名获取pid
- shell通过端口号获取PID(进程号)
- linux C 获取pid终极父进程的PID
- windows进程PID的获取以及杀死
- Shell 获取自身pid: $$
- Linux获取进程pid
- JAVA 获取进程PID
- [Win32]获取指定进程的父进程PID
- 嵌入式 一个进程获取另一个指定名称进程的PID
- 如何通过进程pid获取进程名、可执行文件的名称
- bash shell 获取数值的百位、个位
- linux shell 检查进程PID
- 浅谈oracle中的几个日期函数
- VERIFY( 1 == LoadSkinFile("BlueHorn.smf")) skinmagic加载皮肤出错
- [C]名字大战(控制台小游戏)
- struts2之5--国际化支持
- undo系列学习之undo入门基础知识介绍
- bash shell获取进程的pid
- ASCII中LF与CR区别 ?
- FMDatabase 的使用方法
- ORA-600 [4194] 说明
- ios学习笔记之 类变量与实例变量区别
- C_链表
- FFMpeg 中比较重要的函数以及数据结构
- uva-439 - Knight Moves
- echo 与printf的异同