用c语言写一个任务管理器的代码
时间: 2025-01-01 13:36:48 浏览: 3
在C语言中编写一个简单的任务管理器,通常会涉及到线程或者进程的概念,这里提供一个基础的命令行界面示例,使用`stdio.h`, `stdlib.h` 和 `unistd.h` 来创建、暂停、继续和停止任务(这里假设任务是一个简单的无限循环):
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define MAX_TASKS 5
typedef struct {
pid_t task_pid;
char* name;
} Task;
Task tasks[MAX_TASKS];
void start_task(char* task_name) {
if (tasks_count >= MAX_TASKS) {
printf("Error: Maximum number of tasks reached.\n");
return;
}
tasks[tasks_count].name = task_name;
tasks[tasks_count].task_pid = fork();
if (tasks[tasks_count].task_pid == 0) { // 子进程
while (true) {
printf("Child process %s is running...\n", task_name);
sleep(1); // 模拟简单任务
}
} else {
tasks[tasks_count++].task_pid = wait(NULL);
printf("Task %s started with PID %d\n", task_name, tasks[tasks_count - 1].task_pid);
}
}
// 其他函数如暂停、继续和停止可以按类似思路实现,这里简化处理
void stop_task(pid_t task_pid) {
kill(task_pid, SIGTERM); // 发送SIGTERM信号给任务终止
printf("Stopped task with PID %d\n", task_pid);
}
int main() {
int choice;
do {
printf("\nTask Manager:\n1. Start a new task\n2. Stop a task\n3. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
char task_name[50];
printf("Enter task name: ");
fgets(task_name, sizeof(task_name), stdin);
task_name[strlen(task_name) - 1] = '\0'; // remove newline character
start_task(task_name);
break;
case 2:
printf("Enter the PID of the task to stop: ");
int pid;
scanf("%d", &pid);
stop_task(pid);
break;
case 3:
printf("Exiting...\n");
break;
default:
printf("Invalid option. Try again.\n");
break;
}
} while (choice != 3);
return 0;
}
```
这只是一个基本的框架,实际的任务管理器会更复杂,可能需要处理更多的错误情况,并且任务管理功能可能会利用更高级的同步原语,比如互斥量或条件变量。
阅读全文