C++代码不读proc获取pid
时间: 2023-12-03 16:47:48 浏览: 90
在C++中,可以使用系统调用`getpid()`获取当前进程的PID。示例代码如下:
```c++
#include <iostream>
#include <unistd.h>
int main() {
pid_t pid = getpid();
std::cout << "PID: " << pid << std::endl;
return 0;
}
```
`getpid()`函数位于`unistd.h`头文件中,返回类型为`pid_t`,表示进程ID。调用该函数后,即可获取当前进程的PID并输出到控制台。
相关问题
C++代码不读proc获取其他pid
如果您想要获取其他进程的 PID,可以使用以下方法:
1. 使用 `ps` 命令获取进程列表,然后从输出中提取 PID。
```c++
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char path[1035];
fp = popen("ps -A | grep <process_name> | awk '{print $1}'", "r");
if (fp == NULL) {
printf("Failed to run command\n" );
exit(1);
}
while (fgets(path, sizeof(path)-1, fp) != NULL) {
printf("%s", path);
}
pclose(fp);
return 0;
}
```
2. 使用 `getpid()` 函数获取当前进程的 PID,然后使用 `fork()` 函数创建一个子进程,在子进程中调用 `exec()` 函数执行其他程序。在父进程中使用 `wait()` 函数等待子进程结束,并获取子进程的 PID。
```c++
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid;
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
} else if (pid == 0) {
// Child process
execl("<process_path>", "<process_name>", NULL);
perror("exec");
exit(1);
} else {
// Parent process
wait(NULL);
printf("Child process with PID %d has completed.\n", pid);
}
return 0;
}
```
请注意,您需要将 `<process_name>` 和 `<process_path>` 替换为您要获取 PID 的进程的名称和路径。
C++代码不读proc获取其他应用的pid
在 C++ 中,可以使用 Windows API 来获取其他应用程序的 PID。以下是一个示例代码,它使用了 Windows API 中的 `FindWindow` 和 `GetWindowThreadProcessId` 函数来获取指定窗口对应的应用程序的 PID。
```cpp
#include <Windows.h>
#include <iostream>
int main()
{
HWND hwnd = FindWindow(nullptr, "Window Title"); // 替换成你要获取 PID 的窗口标题
if (hwnd == NULL)
{
std::cout << "Window not found\n";
return 0;
}
DWORD pid = 0;
DWORD tid = GetWindowThreadProcessId(hwnd, &pid);
if (pid == 0)
{
std::cout << "Failed to get process id\n";
return 0;
}
std::cout << "PID: " << pid << std::endl;
return 0;
}
```
该代码首先调用 `FindWindow` 函数来获取指定窗口的句柄,如果找不到窗口,则输出错误信息并退出程序。如果找到了窗口,则调用 `GetWindowThreadProcessId` 函数来获取该窗口对应的线程 ID 和进程 ID。如果成功获取了进程 ID,则输出该进程的 PID。
阅读全文