利用C语言编写程序启动一个新的进程,Windows:在进程中启动计算器应用程序(calc.exe),或者Linux:在进程中启动编辑器应用程序
时间: 2024-10-24 18:07:47 浏览: 30
在C语言中,启动新进程通常通过操作系统提供的API函数来完成,这需要系统调用的支持。以下是针对Windows和Linux两个平台启动新进程的例子:
**Windows (利用CreateProcess函数)**
```c
#include <windows.h>
int main() {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpDesktop = L"_desktop"; // 可选,指定会话桌面
si.dwFlags = STARTF_USESHOWWINDOW; // 显示窗口标志
si.wShowWindow = SW_SHOW; // 窗口显示模式
ZeroMemory(&pi, sizeof(pi));
HANDLE hCalc = CreateProcess(
NULL, // 父进程的路径名,这里为空表示当前进程
"calc.exe", // 子进程要执行的命令行
NULL, // 拥有创建权限的父进程的线程安全属性
NULL, // 创建权限的父进程的线程安全属性
FALSE, // 是否继承父进程的句柄
CREATE_NEW_CONSOLE | // 新进程选项,如新控制台
DETACHED_PROCESS, // 进程是否独立于终端
NULL, // 进程启动环境变量
&si, // 启动信息结构
&pi // 返回进程信息结构
);
if (hCalc != NULL) {
CloseHandle(hCalc); // 关闭进程句柄
printf("Calculator process started with PID: %d\n", pi.dwProcessId);
} else {
printf("Failed to start calculator.\n");
}
return 0;
}
```
**Linux (利用fork和exec系列函数)**
```c
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork(); // 创建子进程
if (pid == 0) { // 子进程
execlp("/usr/bin/vi", "vi", "-n", NULL); // 执行vi编辑器
perror("Could not execute editor");
_exit(EXIT_FAILURE); // 程序失败退出
} else if (pid > 0) { // 父进程
printf("Editor launched in child process with PID: %d\n", pid);
wait(NULL); // 等待子进程结束
} else { // fork失败
perror("Fork failed");
}
return 0;
}
```
阅读全文