kernel中遍历所有进程

看下具体的宏定义实现:

#define for_each_process(p) \
	for (p = &init_task ; (p = next_task(p)) != &init_task ; )


在看下具体例子,打印所有进程的函数调用栈:

static void wdt_report_info (void)
{
    struct task_struct *task ;
    task = &init_task ;
    
    printk ("Qwdt: -- watchdog time out\n") ;
    for_each_process (task)
    {
        if (task->state == 0)
        {
            printk ("PID: %d, name: %s\n backtrace:\n", task->pid, task->comm) ;
            show_stack (task, NULL) ;
            printk ("\n") ;
        }
    }
    printk ("backtrace of current task:\n") ;
    show_stack (NULL, NULL) ;
 }


 

遍历 Python 进程的所有句柄,可以使用 `ctypes` 库来访问 Windows API。下面是一个示例代码: ``` import ctypes import sys kernel32 = ctypes.windll.kernel32 PROCESS_QUERY_INFORMATION = 0x0400 PROCESS_VM_READ = 0x0010 def enum_windows_handles(pid): hModule = kernel32.GetModuleHandleW("kernel32.dll") psapi = ctypes.WinDLL("psapi.dll") EnumProcessModules = psapi.EnumProcessModules EnumProcessModules.restype = ctypes.c_bool GetModuleBaseName = psapi.GetModuleBaseNameW GetModuleBaseName.restype = ctypes.c_uint GetModuleBaseName.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint32] hProcess = kernel32.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, False, pid) if hProcess: modules = (ctypes.c_void_p * 1024)() cbNeeded = ctypes.c_uint32() if EnumProcessModules(hProcess, ctypes.byref(modules), ctypes.sizeof(modules), ctypes.byref(cbNeeded)): nMods = cbNeeded.value // ctypes.sizeof(ctypes.c_void_p) for i in range(nMods): module = modules[i] module_name = ctypes.create_unicode_buffer(1024) GetModuleBaseName(hProcess, module, module_name, ctypes.sizeof(module_name)) print(module_name.value) else: print("Failed to enumerate modules.") kernel32.CloseHandle(hProcess) else: print("Failed to open process with PID %d." % pid) sys.exit(1) enum_windows_handles(pid=int(sys.argv[1])) ``` 这段代码使用了 `ctypes` 库调用了 Windows API 来遍历指定的进程的所有模块。使用方法是执行这个代码,并将要遍历进程的 PID 作为参数传入: ``` python enum_handles.py 12345 ``` 其,`12345` 是要遍历进程的 PID。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值