C++ 启动进程并获取PID
时间: 2023-08-05 12:09:10 浏览: 487
可以通过使用C++中的system函数启动一个进程,并使用Windows API中的GetCurrentProcessId函数获取该进程的PID。以下是一个示例代码:
```c++
#include <iostream>
#include <windows.h>
int main() {
// 启动进程
system("notepad.exe");
// 获取当前进程的PID
DWORD pid = GetCurrentProcessId();
std::cout << "PID: " << pid << std::endl;
return 0;
}
```
在上述代码中,我们使用system函数启动了notepad.exe进程。然后,我们使用GetCurrentProcessId函数获取此程序的PID。最后,我们将PID输出到控制台。
相关问题
LINUX C++ 启动进程 并获取子进程PID
在 Linux 平台上,可以使用 `fork()` 系统调用创建子进程,并使用 `getpid()` 函数获取父进程的 PID 和获取子进程的 PID。以下是一个示例代码:
```c++
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
std::cout << "子进程的 PID: " << getpid() << std::endl;
// 执行子进程的代码
} else if (pid > 0) {
// 父进程
std::cout << "父进程的 PID: " << getpid() << std::endl;
std::cout << "子进程的 PID: " << pid << std::endl;
} else {
// fork() 失败
std::cerr << "fork() 失败" << std::endl;
return 1;
}
return 0;
}
```
在上述代码中,我们使用 `fork()` 创建了一个子进程。在子进程中,我们使用 `getpid()` 函数获取子进程的 PID 并输出到控制台;在父进程中,我们使用 `getpid()` 函数获取父进程的 PID 并输出到控制台,同时使用 `pid` 变量获取子进程的 PID 并输出到控制台。需要注意的是,子进程会继承父进程的所有资源和环境,且 `fork()` 调用后会返回两次,一次在父进程中,一次在子进程中,因此需要使用 `pid` 变量判断当前进程是父进程还是子进程。
LINUX C++ 在 进程 XXX 中 启动 进程YYY 并获取 YYY的PID
在 Linux 平台上,可以使用 `fork()` 系统调用创建子进程,并使用 `getpid()` 函数获取父进程的 PID 和获取子进程的 PID。如果要在进程 XXX 中启动进程 YYY,可以使用 `fork()` 创建子进程,然后在子进程中使用 `execvp()` 函数启动进程 YYY。以下是一个示例代码:
```c++
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == 0) {
// 子进程
char* args[] = {"./YYY", NULL};
execvp(args[0], args);
// 如果 execvp() 返回,则启动进程 YYY 失败
std::cerr << "启动进程 YYY 失败" << std::endl;
return 1;
} else if (pid > 0) {
// 父进程
std::cout << "父进程的 PID: " << getpid() << std::endl;
std::cout << "子进程的 PID: " << pid << std::endl;
int status;
waitpid(pid, &status, 0);
std::cout << "子进程退出状态: " << WEXITSTATUS(status) << std::endl;
} else {
// fork() 失败
std::cerr << "fork() 失败" << std::endl;
return 1;
}
return 0;
}
```
在上述代码中,我们使用 `fork()` 创建了一个子进程。在子进程中,我们使用 `execvp()` 函数启动进程 YYY;在父进程中,我们使用 `waitpid()` 函数等待子进程退出,并使用 `WEXITSTATUS()` 函数获取子进程的退出状态并输出到控制台。需要注意的是,`execvp()` 函数如果返回则启动进程 YYY 失败,因此需要在子进程中处理启动失败的情况。在调用 `waitpid()` 函数时,第三个参数为 0 表示等待子进程退出,如果传入 WNOHANG 则表示非阻塞等待,即如果子进程没有退出,则立即返回。
阅读全文