用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死运行进程等功能。
时间: 2024-12-11 08:18:19 浏览: 9
在C语言中,你可以使用POSIX标准库函数来模拟进程管理。下面是一个简单的示例,展示了如何通过系统调用来创建、查看、挂起(换出)和终止(杀死)进程:
1. **创建新进程** (fork()函数):
```c
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t child_pid = fork(); // 创建新进程
if (child_pid == 0) { // 子进程
printf("我是子进程,PID: %d\n", getpid());
exit(0); // 子进程结束
} else if (child_pid > 0) { // 父进程
printf("我是父进程,PID: %d, 子进程PID: %d\n", getpid(), child_pid);
} else {
perror("Fork failed");
return 1;
}
}
```
2. **查看运行进程** (ps或pgrep命令):
在终端里可以使用`ps -p [pid]`或`pgrep [process_name]`命令来查看指定进程的信息。
3. **换出进程** (nice或renice命令):
如果你想让进程变为后台运行并降低优先级,可以使用`nice -n [niceness] [command]`,其中niceness值越小优先级越高,负数表示更低的优先级。换出(挂起)进程不是直接操作,而是通过改变其优先级间接实现。
4. **杀死进程** (kill()函数):
使用`kill([signal], [pid])`来发送信号给进程。比如,发送SIGTERM信号会尝试优雅地退出,而SIGKILL则强制停止进程,忽略所有清理工作。例如:
```c
#include <sys/types.h>
#include <signal.h>
void sig_handler(int signum) {
printf("Process killed by signal %d.\n", signum);
}
int main() {
// 注册信号处理函数
struct sigaction sa;
sa.sa_handler = sig_handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(SIGINT, &sa, NULL);
// 发送SIGINT信号模拟用户中断
kill(getppid(), SIGINT);
return 0;
}
```
请注意,实际操作需要考虑权限和安全问题,上述代码仅为演示目的。
阅读全文