你用了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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)