如何在启动一个进程时获取其PID?
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
-
- 帖子: 7
- 注册时间: 2010-03-09 22:47
Re: 如何在启动一个进程时获取其PID?
#!/bin/bash
echo "The PID for this progress is:$$"
exit 0
echo "The PID for this progress is:$$"
exit 0
-
- 帖子: 7
- 注册时间: 2010-03-09 22:47
Re: 如何在启动一个进程时获取其PID?
#!/bin/bash
echo "The PID for this progress is:$$"
exit 0
echo "The PID for this progress is:$$"
exit 0
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
Re: 如何在启动一个进程时获取其PID?
不好意思, 我要的不是这个... 你这只是把程序本身的PID反馈一下(跟C里面的printf("%s", getpid())一回事儿), 比如我要在shell中启动firefox并把相应的firefox的进程ID保存下来... 怎么做?lvkangpeng 写了:#!/bin/bash
echo "The PID for this progress is:$$"
exit 0
要得到一个进程的运行时间可以执行 :
代码: 全选
time ./aprogram
运行gvim并把它的pid保存到变量PID中呢?
代码: 全选
PID=`run-and-getpid gvim`
- xiooli
- 帖子: 6956
- 注册时间: 2007-11-19 21:51
- 来自: 成都
- 联系:
Re: 如何在启动一个进程时获取其PID?
echo $!
获取上一行运行程序的pid
获取上一行运行程序的pid
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
Re: 如何在启动一个进程时获取其PID?
不好意思, 在ABS_GUIDE上查了下, "$!" 保存的是,最后一次后台任务的IDxiooli 写了:echo $!
获取上一行运行程序的pid
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 如何在启动一个进程时获取其PID?
你要保存其 PID 做处理,那自然应该把它放到后台运行呀
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
Re: 如何在启动一个进程时获取其PID?
并非全部如此, 比如脱离终端的进程, gvim, mocp, xmms... 它们运行之后就不在读写终端了, 你可以接着执行其它命令...aerofox 写了:你要保存其 PID 做处理,那自然应该把它放到后台运行呀
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
Re: 如何在启动一个进程时获取其PID?
你这个仍然不行...eexpress 写了:要子进程的?那自己pstree带pid显示,查吧。
在一个进程中新开一个脱离终端的进程, 新的进程并不(一定)是当前进程(或shell)的子进程, 比如gvim, 它会成为init的子进程...这样就没法通过此法跟踪刚启动进程的ID了, 因为同一进程会开启不止1个进程实例...
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 如何在启动一个进程时获取其PID?
fork() 了就不好办了。一般可以把其前一个进程的 ID 加1或者2,不过那个进程的 ID 貌似也不好得到。潇洒走一回 写了:你这个仍然不行...eexpress 写了:要子进程的?那自己pstree带pid显示,查吧。
在一个进程中新开一个脱离终端的进程, 新的进程并不(一定)是当前进程(或shell)的子进程, 比如gvim, 它会成为init的子进程...这样就没法通过此法跟踪刚启动进程的ID了, 因为同一进程会开启不止1个进程实例...
自己 fork() 吧。gvim 是可以带参数 -f 或者 --no-fork 的。如果 shell 办不到的话,自己拿 C 或者 Python 写个程序来启动它就是了(先 fork() 再 exec())。
- 潇洒走一回
- 帖子: 735
- 注册时间: 2009-05-20 21:43
Re: 如何在启动一个进程时获取其PID?
当然, 如果无法用shell来解决, 只能fork+exec了...lilydjwg 写了:fork() 了就不好办了。一般可以把其前一个进程的 ID 加1或者2,不过那个进程的 ID 貌似也不好得到。潇洒走一回 写了:你这个仍然不行...eexpress 写了:要子进程的?那自己pstree带pid显示,查吧。
在一个进程中新开一个脱离终端的进程, 新的进程并不(一定)是当前进程(或shell)的子进程, 比如gvim, 它会成为init的子进程...这样就没法通过此法跟踪刚启动进程的ID了, 因为同一进程会开启不止1个进程实例...
自己 fork() 吧。gvim 是可以带参数 -f 或者 --no-fork 的。如果 shell 办不到的话,自己拿 C 或者 Python 写个程序来启动它就是了(先 fork() 再 exec())。
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
Re: 如何在启动一个进程时获取其PID?
如果是shell里启动的进程又起了子进程,并且自己退出了的话,shell确实管不住它了。
只能用 ps 结合命令名、启动时间等信息,来定位了。
只能用 ps 结合命令名、启动时间等信息,来定位了。
关注我的blog: ε==3