如何在启动一个进程时获取其PID?

sh/bash/dash/ksh/zsh等Shell脚本
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

如何在启动一个进程时获取其PID?

#1

帖子 潇洒走一回 » 2010-03-13 23:09

如题。。。
启动的同时获取其PID。。。
谢谢!!!
lvkangpeng
帖子: 7
注册时间: 2010-03-09 22:47

Re: 如何在启动一个进程时获取其PID?

#2

帖子 lvkangpeng » 2010-03-15 21:38

#!/bin/bash
echo "The PID for this progress is:$$"
exit 0
lvkangpeng
帖子: 7
注册时间: 2010-03-09 22:47

Re: 如何在启动一个进程时获取其PID?

#3

帖子 lvkangpeng » 2010-03-15 21:38

#!/bin/bash
echo "The PID for this progress is:$$"
exit 0
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 如何在启动一个进程时获取其PID?

#4

帖子 潇洒走一回 » 2010-03-15 23:09

lvkangpeng 写了:#!/bin/bash
echo "The PID for this progress is:$$"
exit 0
不好意思, 我要的不是这个... 你这只是把程序本身的PID反馈一下(跟C里面的printf("%s", getpid())一回事儿), 比如我要在shell中启动firefox并把相应的firefox的进程ID保存下来... 怎么做?
要得到一个进程的运行时间可以执行 :

代码: 全选

time ./aprogram
是否有一个使用方法类似 time, 用来负责启动一个程序并保存它的pid呢? 假如它的名字叫 run-and-getpid, 是否可以这样
运行gvim并把它的pid保存到变量PID中呢?

代码: 全选

PID=`run-and-getpid gvim`
谢谢!!!
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 如何在启动一个进程时获取其PID?

#5

帖子 xiooli » 2010-03-16 0:14

echo $!

获取上一行运行程序的pid
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 如何在启动一个进程时获取其PID?

#6

帖子 潇洒走一回 » 2010-03-17 16:24

xiooli 写了:echo $!

获取上一行运行程序的pid
谢谢! 要的就是这个效果!!!
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 如何在启动一个进程时获取其PID?

#7

帖子 潇洒走一回 » 2010-03-17 16:40

xiooli 写了:echo $!

获取上一行运行程序的pid
不好意思, 在ABS_GUIDE上查了下, "$!" 保存的是,最后一次后台任务的ID
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何在启动一个进程时获取其PID?

#8

帖子 aerofox » 2010-03-23 0:28

你要保存其 PID 做处理,那自然应该把它放到后台运行呀
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 如何在启动一个进程时获取其PID?

#9

帖子 潇洒走一回 » 2010-03-23 9:17

aerofox 写了:你要保存其 PID 做处理,那自然应该把它放到后台运行呀
并非全部如此, 比如脱离终端的进程, gvim, mocp, xmms... 它们运行之后就不在读写终端了, 你可以接着执行其它命令...
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何在启动一个进程时获取其PID?

#10

帖子 eexpress » 2010-03-23 9:24

要子进程的?那自己pstree带pid显示,查吧。
● 鸣学
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 如何在启动一个进程时获取其PID?

#11

帖子 潇洒走一回 » 2010-03-23 10:13

eexpress 写了:要子进程的?那自己pstree带pid显示,查吧。
你这个仍然不行...
在一个进程中新开一个脱离终端的进程, 新的进程并不(一定)是当前进程(或shell)的子进程, 比如gvim, 它会成为init的子进程...这样就没法通过此法跟踪刚启动进程的ID了, 因为同一进程会开启不止1个进程实例...
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何在启动一个进程时获取其PID?

#12

帖子 lilydjwg » 2010-03-23 22:51

潇洒走一回 写了:
eexpress 写了:要子进程的?那自己pstree带pid显示,查吧。
你这个仍然不行...
在一个进程中新开一个脱离终端的进程, 新的进程并不(一定)是当前进程(或shell)的子进程, 比如gvim, 它会成为init的子进程...这样就没法通过此法跟踪刚启动进程的ID了, 因为同一进程会开启不止1个进程实例...
fork() 了就不好办了。一般可以把其前一个进程的 ID 加1或者2,不过那个进程的 ID 貌似也不好得到。
自己 fork() 吧。gvim 是可以带参数 -f 或者 --no-fork 的。如果 shell 办不到的话,自己拿 C 或者 Python 写个程序来启动它就是了(先 fork() 再 exec())。
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 如何在启动一个进程时获取其PID?

#13

帖子 潇洒走一回 » 2010-03-23 23:08

lilydjwg 写了:
潇洒走一回 写了:
eexpress 写了:要子进程的?那自己pstree带pid显示,查吧。
你这个仍然不行...
在一个进程中新开一个脱离终端的进程, 新的进程并不(一定)是当前进程(或shell)的子进程, 比如gvim, 它会成为init的子进程...这样就没法通过此法跟踪刚启动进程的ID了, 因为同一进程会开启不止1个进程实例...
fork() 了就不好办了。一般可以把其前一个进程的 ID 加1或者2,不过那个进程的 ID 貌似也不好得到。
自己 fork() 吧。gvim 是可以带参数 -f 或者 --no-fork 的。如果 shell 办不到的话,自己拿 C 或者 Python 写个程序来启动它就是了(先 fork() 再 exec())。
当然, 如果无法用shell来解决, 只能fork+exec了...
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 如何在启动一个进程时获取其PID?

#14

帖子 eexpress » 2010-03-24 8:52

额。这情况,是shell之外的事情了。
问下,你这么作,准备干嘛呢?目的?
● 鸣学
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

Re: 如何在启动一个进程时获取其PID?

#15

帖子 bones7456 » 2010-03-24 9:21

如果是shell里启动的进程又起了子进程,并且自己退出了的话,shell确实管不住它了。
只能用 ps 结合命令名、启动时间等信息,来定位了。
关注我的blog: ε==3
回复