请教关于pid的问题,用两种方法得到pid却不一样?谢谢

时间:2021-05-24 19:29:58
我在cap.sh调用了几个应用程序,顺序分别如下:tcpdump,psml,postmaster这三个应用程序(顺序依次执行的)。 
现在我问题是我想用shell程序实时的查询cap.sh进程是否已经执行完毕或者是否正在执行中。如果正在执行中,那么想得到他的pid的号,以便我在前台进行kill掉。请教这个shell怎么写?有我发现我在cap.sh中用$$得到pid,与ps -ef|awk '/cap.sh/{print $2}'得到怎么会不一样啊?

13 个解决方案

#1


或者说如何得到cap.sh中正在运行的进程号??

#2


你是想得到cap.sh这个的进程号,还是想得到cap.sh中tcpdump等程序的进程号?

#3


谢谢回复
其实我想得到当前cap.sh正在运行的子进程号,因为cap.sh中有三个子进程,tcpdump不一定在运行,有可能运行完毕,正在运行psml程序。

#4


一个程序在每次运行,都可能用的不一样的pid,用pid不足以标识

#5


是啊,我这么想的。要不就是先得到cap.sh进程号,然后再通过这个父进程号得到cap.sh中正在运行的子进程号。这样可以吗

#6


在sh里用ps、grep、awk一类的命令去查找不就行咯

#7


killall就可以了,不用查询进程号吧

#8


可惜我不会啊,可以给我一个示范吗?就是由父进程号得到子进程号

#9


顶~~~~

#10


一个程序在每次运行,都可能用的不一样的pid。

pid只是标识的是本次程序的运行标识,但是,它是现存的唯一标识。

#11


请教如何由父进程得到子进程的的pid啊

#12


或者如何用pstree -p实现由父进程的pid得到正在运行的子进程的pid呢??谢谢

#13


ding

#1


或者说如何得到cap.sh中正在运行的进程号??

#2


你是想得到cap.sh这个的进程号,还是想得到cap.sh中tcpdump等程序的进程号?

#3


谢谢回复
其实我想得到当前cap.sh正在运行的子进程号,因为cap.sh中有三个子进程,tcpdump不一定在运行,有可能运行完毕,正在运行psml程序。

#4


一个程序在每次运行,都可能用的不一样的pid,用pid不足以标识

#5


是啊,我这么想的。要不就是先得到cap.sh进程号,然后再通过这个父进程号得到cap.sh中正在运行的子进程号。这样可以吗

#6


在sh里用ps、grep、awk一类的命令去查找不就行咯

#7


killall就可以了,不用查询进程号吧

#8


可惜我不会啊,可以给我一个示范吗?就是由父进程号得到子进程号

#9


顶~~~~

#10


一个程序在每次运行,都可能用的不一样的pid。

pid只是标识的是本次程序的运行标识,但是,它是现存的唯一标识。

#11


请教如何由父进程得到子进程的的pid啊

#12


或者如何用pstree -p实现由父进程的pid得到正在运行的子进程的pid呢??谢谢

#13


ding