如何获取一个进程中所有线程ID

如何获取一个进程中所有线程ID,第1张

GetThreadId 根据线程句柄得到线程ID。

GetWindowThreadProcessId ,根据窗口句柄得到此窗口所在线程的ID(也同时得到进程的ID)

OpenThread,能根据ID得到线程的句柄。

linux C中,获取当前进程id 函数为getpid() ;

头文件:#include <unistdh>

函数原型:pid_t getpid(void);

函数说明:getpid ()用来取得目前进程的进程id,许多程序利用取到的此值来建立临时文件, 以避免临时文件相同带来的问题。

返回值:目前进程的进程id

范例

#include <stdioh>

#include <unistdh>

main()

{

    printf("pid=%d\n", getpid());

}

执行:

pid=1494 /每次执行结果都不一定相同 /

package test;

import javaioBufferedReader;

import javaioFile;

import javaioFileWriter;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javaioPrintWriter;

public class GetPid {

private static final String PNAME = "QQ";

public static void main(String[] args)

throws IOException {

Systemoutprintln("包含关键字 "+PNAME+" 的进程有:");

Systemoutprintln();

String path = SystemgetProperty("userdir");

final File createFileName = new File(path + "\\mytempscriptvbe");

if(createFileNameexists()createFileNamedelete():createFileNamecreateNewFile()){}

final PrintWriter pw = new PrintWriter(new FileWriter(createFileName,

true), true);

pwprintln("for each ps in getobject(\"winmgmts:\\\\\\root\\cimv2:win32_process\")instances_");

pwprintln("wscriptecho pshandle&vbtab&psname");

pwprintln("next");

pwclose();

final InputStream ii = RuntimegetRuntime()exec(

"cscript " + path + "\\mytempscriptvbe")getInputStream();

final InputStreamReader ir = new InputStreamReader(ii);

final BufferedReader br = new BufferedReader(ir);

String str = null;

String[] ss = null;

while ((str = brreadLine()) != null) {

if (strindexOf(PNAME)>0&&strendsWith("exe")) {

ss = strsplit("\\s");

for(int i=0;i<sslength;i+=2){

Systemoutprintln("");

Systemoutprintln("进程名:"+ss[i+1]+"\n进程ID:"+ss[i]);

}

}

}

Systemoutprintln("");

irclose();

iiclose();

brclose();

}

}

运行结果如下

包含关键字 QQ 的进程有:

进程名:QQexe

进程ID:3956

通过linux命令来获取进程ID范例代码

Process psProcess = RuntimegetRuntime()exec("sh");

DataOutputStream out = new DataOutputStream( psProcessgetOutputStream() );

InputStream is = psProcessgetInputStream();

outwriteBytes( "ps | grep '***loader' | cut -c 10-14\n" );

outwriteBytes( "ps\n" );

outflush();

try {

    psProcesswaitFor();

     } catch (InterruptedException e) {

                 // TODO Auto-generated catch block

                 eprintStackTrace();}

  

if(isread() != 0)

{

   byte firstByte = (byte)isread();  

   int available = isavailable();

   byte[] characters = new byte[available + 1];

   characters[0] = firstByte;

   isread( characters, 1, available );

   String re = new String( characters );

没事做,写个详细代码给你吧

#include<windowsh>

#include<tlhelp32h>//声明快照函数的头文件

int main(int argc,char argv[])

{

PROCESSENTRY32 pe32;

//在使用这个结构之前,先设置它的大小

pe32dwSize=sizeof(pe32);

//给系统内的所有进程拍一个快照

HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

//遍历进程快照,轮流显示每个进程的信息

BOOL bMore=::Process32First(hProcessSnap,&pe32);

while(bMore)

{

if(strcmp("abcexe",pe32szExeFile)==0)//如果找到进程名为abcexe

{

HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32th32ProcessID);//获取句柄

/这里已经打开那个进程的句柄了/ }

bMore=::Process32Next(hProcessSnap,&pe32);//寻找下一个

}

return 0;

}

当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。

在某些情况下,你也许想要知道运行中的子shell的PID。这个PID信息可以在不同的情况下使用。比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件。有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身的子shell。

在bash中,子shell进程的PID存储在一个特殊的变量‘$$'中。这个变量只读,你不可以在脚本中修改它。比如:

复制代码代码如下:

#!/bin/bash

echo "PID of this script: $$"

上面的脚本会得到下面的输出:

复制代码代码如下:

PID of this script: 6583

除了$$, bash shell还会导出其他的只读变量。比如,PPID存储子shell父进程的ID(也就是主shell)。UID存储了执行这个脚本的当前用户ID。比如:

复制代码代码如下:

#!/bin/bash

echo "PID of this script: $$"

echo "PPID of this script: $PPID"

echo "UID of this script: $UID"

输出是:

复制代码代码如下:

PID of this script: 6686

PPID of this script: 4656

UID of this script: 1000

上面输出中,PID每次执行都会变化。这个因为每次运行都会创建一个新的shell。另一方面,PPID每次都会一样只要你在同一个shell中运行。

对于所有bash内置变量列表,参考man页。

复制代码代码如下:

$ man bash

用法:开个cmdexe窗口,输入:ntsd -c q -p PID

把最后那个PID,改成你要终止的进程的ID。如果你不知道进程的ID,任务管理器->进程选项卡->查看->选择列->勾上"PID(进程标识符)",然后就能看见了。

答2:xp下还有两个好东东tasklist和tskill。tasklist能列出所有的进程,和相应的信息。tskill能查杀进程,语法很简单:tskill 程序名!!

比如杀死进程 QQ

taskkill /f /fi "IMAGENAME eq QQexe"

1、用taskill命令

①taskkill /im

进程名称

示例:用taskkill /im

VStartexe命令关闭音速启动,VStartexe就是音速启动的进程名称,下面看 *** 作,执行了三次,成功关闭了音速启动,再看下面的方法

②taskkill /pid[进程码]

-t(结束该进程)

-f(强制结束该进程以及所有子进程)

注:有两种方法查进程的PID码:

①在命令行下用 tasklist 命令查出进程的PID号码,就是这些

原型:

int WINAPI icePub_getProcessInfo(char strInfoList ,int maxLen)

输入:maxLen strInfoList最大长度

输出:strInfoList 进程基本信息,name|pid|path,一行一条信息

int recordCounts;

char buff[102430+1];

typedef int (WINAPI ICEPUB_GETPROCESSINFO)(char strInfoList ,int maxLen);

ICEPUB_GETPROCESSINFO icePub_getProcessInfo = 0;

HINSTANCE hDLLDrv = LoadLibrary("icePubDlldll");

if(hDLLDrv)

{

icePub_getProcessInfo = (ICEPUB_GETPROCESSINFO )GetProcAddress(hDLLDrv, "icePub_getProcessInfo");

}

if(icePub_getProcessInfo)

recordCounts=icePub_getProcessInfo(buff,102430);

if(hDLLDrv)

FreeLibrary(hDLLDrv);

AfxMessageBox(buff);

以上就是关于如何获取一个进程中所有线程ID全部的内容,包括:如何获取一个进程中所有线程ID、linux 获取进程id 函数、java 获取指定的进程id等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存