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),

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

窗体上添加一个 text 一个按钮 只需在text中输入进程名单击一下按钮 就可以

只需要三个api

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Private Type PROCESSENTRY32

dwSize As Long

cntUsage As Long

th32ProcessID As Long

th32DefaultHeapID As Long

th32ModuleID As Long

cntThreads As Long

th32ParentProcessID As Long

pcPriClassBase As Long

dwFlags As Long

szExeFile As String 1024

End Type

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)

Const TH32CS_INHERIT = &H80000000

Dim pid As Long

Dim pname As String

Dim a As String

Private Sub Command1_Click()

a = Trim(LCase(Text1))

Dim my As PROCESSENTRY32

Dim l As Long

Dim l1 As Long

Dim flag As Boolean

Dim mName As String

Dim i As Integer

l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

If l Then

mydwSize = 1060

End If

If (Process32First(l, my)) Then '遍历第一个进程

Do

i = InStr(1, myszExeFile, Chr(0)) '返回chr(0)在各个进程中出现的位置

mName = LCase(Left(myszExeFile, i - 1)) '返回小写的(返回i-1的前n个字符,即正确的名称)

If mName = a Then

pid = myth32ProcessID

Text1 = Text1 & "的pid是 " & "---" & pid

End If

Loop Until (Process32Next(l, my) < 1)

End If

End Sub

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

FOR /F "delims=, tokens=1,2 skip=3" %%a IN ('tasklist /fo csv /fi ^"imagename eq cmdexe^"') do echo %%b

ps -p "1 2" 将会只选出pid是1和2的进程

ps -p 444 将会只选出pid是444的进程

也就是说,通过-p来指定pid即可,可以指定单个,也可以指定多个pid的列表,就看你的需求了

用ShellExecuteExW API传SHELLEXECUTEINFOW结构体的值来启动应用程序GetProcessId(ShExecInfohProcess);

就能获取启动应用程序的PID了。

以上就是关于linux 如何获得正在运行程序的pid全部的内容,包括:linux 如何获得正在运行程序的pid、有没有办法通过PID 获取进程名、如何用批处理获取指定程序进程的PID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9481302.html

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

发表评论

登录后才能评论

评论列表(0条)

保存