linux 如何获得正在运行程序的pid

linux 如何获得正在运行程序的pid,第1张

你用了pthread库,在链接的时候要加上

gcc

-lpthread

1c

-o

1

即可

进程(对应pid==0语句)调用pthread接口创建线程,在县城内将value赋值5,然后打印

child:

value=%d\n

此时value

=

5

父进程

(对应

pid

>

0

语句),等待子进程执行完成后(wait语句),打印parent:

value=%d\n

,此时value

=

0

对于你补充问题的回答:

线程是在子进程里创建的,它只改变了子进程的value

(子进程和父进程的value处在不同的地址空间,互相没有关系,而子进程和它所创建的线程是在同一地址空间,所以线程可以改变子进程的value),

父进程没有创建线程,因此它的值不会被改变。

在《如何压缩程序占用内存的方法》里我为了测试程序的内存占用大小写了一个shell脚本

$1 &

echo "$1 pid:$!"

sleep 3

pmap $!|grep total|awk -v pid="$!" '{print "pid",pid," memory:",$2}'

里面需要用到linux shell的特殊变量$!,网上都是说$! 返回的是 上一个命令的PID。

但是我实际测试得出,这个说法一般不对,一般对

对于前台命令不对:

[root@bogon ~]# wc -l atxt

2162 atxt

[root@bogon ~]# echo $!

[root@bogon ~]#

但是对于后台命令是对的:

[root@bogon ~]# wc -l atxt &

[1] 9155

2162 atxt

[root@bogon ~]# echo $!

9155

[1]+ Done wc -l atxt

而且,之后若是执行的命令不是后台命令的话,$!里的值都不会改变,直到下一个后台命令执行为止

[root@bogon ~]# wc -l atxt

2162 atxt

[root@bogon ~]# echo $!

9155

[root@bogon ~]# wc -l atxt &

[1] 9198

[root@bogon ~]# 2162 atxt

[1]+ Done wc -l atxt

[root@bogon ~]# echo $!

9198

要用到2个API函数

1Declare

Function

GetWindowThreadProcessId

Lib

"user32"

(ByVal

hwnd

As

Long,

lpdwProcessId

As

Long)

As

Long

从窗口句并获取进程PID

2Declare

Function

FindWindow

Lib

"user32"

Alias

"FindWindowA"

(ByVal

lpClassName

As

String,

ByVal

lpWindowName

As

String)

As

Long

查找窗口句柄

pw

=

FindWindow(vbNullString,

"连连看

v41")‘'查找连连看把找到的结果存在PW是保存窗口句柄GetWindowThreadProcessId

pw,

pid

'从窗口句柄获取进程ID,PID是保存进程ID

HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0 );

PROCESSENTRY32 procentry=sizeof(PROCESSENTRY32);

BOOL bFlag=Process32First( hSnapShot, &procentry ) ;

while( bFlag )

{

if(stricmp(procentryszExeFile, "你的程序名 ")==0)

processid=procentryth32ProcessID; //找到

bFlag=Process32Next(hSnapShot,&procentry);

}

注意一个程序可能有几个实例同时运行,所以可能同时找到几个ID。

下面的命令就是显示进程名称为cmdexe的pid,不过这里有一个问题就是获得的pid是包括双引号的,这个你要自己再处理一下。

for

/f

"delims=,

tokens=1,2

skip=3"

%%a

in

('tasklist

/fo

csv

/fi

^"imagename

eq

cmdexe^"')

do

echo

%%b

以上就是关于linux 如何获得正在运行程序的pid全部的内容,包括:linux 如何获得正在运行程序的pid、如何取得后台进程的pid、vb 如何获取进程PID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9732562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存