1.����pidԴ��
2.请教linux下c语言函数fork父进程打印子进程的进程PID
3.进程PID进程ID
4.如何用批处理获取指定程序进程的PID
����pidԴ��
新建个模块然后加入以下代码
Option Explicit
Private Declare Function CreateToolhelpSnapshot Lib "kernel" (ByVal dwFlags As Long, ByVal thProcessID As Long) As Long
Private Declare Function ProcessFirst Lib "kernel" (ByVal hSnapShot As Long, lppe As PROCESSENTRY) As Long
Private Declare Function ProcessNext Lib "kernel" (ByVal hSnapShot As Long, lppe As PROCESSENTRY) As Long
Public Declare Function TerminateProcess Lib "kernel" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Sub CloseHandle Lib "kernel" (ByVal hPass As Long)
Private Const THCS_SNAPPROCESS = &H2&
Private Type PROCESSENTRY
dwSize As Long
cntUsage As Long
thProcessID As Long
thDefaultHeapID As Long
thModuleID As Long
cntThreads As Long
thParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String *
End Type
Const PROCESS_TERMINATE = 1
Function GetPsPid(sProcess As String) As Long
Dim lSnapShot As Long
Dim lNextProcess As Long
Dim tPE As PROCESSENTRY
lSnapShot = CreateToolhelpSnapshot(THCS_SNAPPROCESS, 0&)
If lSnapShot <> -1 Then
tPE.dwSize = Len(tPE)
lNextProcess = ProcessFirst(lSnapShot, tPE)
Do While lNextProcess
If LCase$(sProcess) = LCase$(Left(tPE.szExeFile, InStr(1, tPE.szExeFile, Chr(0)) - 1)) Then
Dim lProcess As Long
Dim lExitCode As Long
GetPsPid = tPE.thProcessID
CloseHandle lProcess
End If
lNextProcess = ProcessNext(lSnapShot, tPE)
Loop
CloseHandle (lSnapShot)
End If
End Function
调用GetPsPid("进程名")
在form1窗体是加入按钮控件和编辑框控件然后计入代码运行输入进程名然后就可以
看到pid了。
Private Sub Command1_Click()
Print GetPsPid(Text1.Text)
End Sub
经过测试完全可用。码进。进程。码进相同位数的源码和补码。进程。码进就这样了
这个就算最简单的进程API函数的 声明了。模块部分都是码进一样的
请教linux下c语言函数fork父进程打印子进程的PID
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
int pipe_fds[2];
int pid;
if(pipe(pipe_fds))
{
fprintf(stderr,"pipe error!\n");
return -1;
}
if((pid = fork())<0)
{
fprintf(stderr, "fork error!\n");
return -1;
}
if(pid == 0)
{
char buf[] = { 0};
int n,i;
close(pipe_fds[1]);
read(pipe_fds[0],buf,sizeof(buf));
n=atoi(buf);
for(i=1;i<=n;i++)
{
if(i% == 0)
printf("\n");
printf("%d\t",i);
}
close(pipe_fds[0]);
}
else
{
int m;
char bf[] = { 0};
close(pipe_fds[0]);
printf("the child pid:%d\n",pid);
printf("please input number:");
scanf("%d",&m);
printf("\n");
sprintf(bf,"%d",m);
write(pipe_fds[1],bf,sizeof(bf));
wait(NULL);
printf("child complete!\n");
}
return 0;
}
进程PID进程ID
进程ID,简称为PID,进程是码进Linux系统中为每个进程分配的唯一标识,由task_struct中的进程售房系统源码pid字段表示。对于无线程进程,码进pid即为其PID,进程与tgid相同。码进内核中的进程pid是每个task_struct的全局唯一线程ID,而tgid则代表进程中的0购源码主线程ID,线程的tgid与其所属线程组的主线程pid一致。
在Linux中,尽管PID实际上是LWP tid(Linux内核中的进程ID),但tgid才是操作系统意义上的PID。例如,RN源码解析进程通过fork产生了进程,此时的PID即为其tgid。
线程在Linux中被视为特殊进程,每个线程有自己的task_struct和PID,但它们共享内存资源。klee源码分析内核通过task_struct的tgid字段识别线程所属进程,每个进程是线程组,所有线程的tgid相同。
引入进程组的目的是解决多用户系统中资源公平调度的问题。通过将进程划分为进程组,如进程组A和进程组B,系统可以根据组进行调度,确保每个用户获得相对平等的CPU时间。Linux内核中的task_group结构用于表示进程组。
会话是登录后一系列相关进程的集合,每个shell窗口对应一个会话,其组长进程(如bash)的PID即为会话ID。会话可以有前台和后台作业,控制终端与会话领头进程(通常bash)连接,用于管理会话中的作业。
PID的申请涉及到pid结构体的使用,具体流程涉及从该结构体中获取PID。深入理解进程组、会话和控制终端的关系有助于理解守护进程的创建。
如何用批处理获取指定程序进程的PID
下面的命令就是显示进程名称为cmd.exe的pid,不过这里有一个问题就是获得的PID是包括双引号的,这个你要自己再处理一下。
FOR /F "delims=, tokens=1,2 skip=3" %%a IN ('tasklist /fo csv /fi ^"imagename eq cmd.exe^"') do echo %%b