请用c语言编写一个程序,可以显示进程的有关标识(进程标识、组标识、用户标识等)。经过5秒钟后,执行另一个程序,最后按用户指示(如:Y/N)结束操作。
时间: 2024-10-08 19:01:29 浏览: 38
在C语言中,我们可以使用`<sys/types.h>`、`<sys/wait.h>`、`<unistd.h>` 和 `<stdio.h>` 等头文件来获取和显示进程信息,以及利用 `sleep()` 函数暂停程序运行。这里是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#define PID_FILE "/tmp/process_info.txt" // 存储进程信息文件
void show_process_info(pid_t pid) {
int status;
char *cmd[3];
// 获取进程信息
cmd[0] = "ps";
cmd[1] = "-p";
cmd[2] = itoa(pid); // 转换pid为字符串形式
FILE *process_info = popen(strcat(cmd, " -o user,group,pid"), "r");
if (process_info != NULL) {
printf("Process ID: %s\n", cmd[2]);
while(fscanf(process_info, "%[^,],%[^,],%d", NULL, NULL, &status) == 3) {
printf("User: %s\nGroup: %s\n", fgets(NULL, sizeof(cmd[2]), process_info), fgets(NULL, sizeof(cmd[2]), process_info));
break; // 只显示第一条记录
}
pclose(process_info);
} else {
perror("Error executing command");
}
remove(PID_FILE); // 清除临时文件
}
int main() {
pid_t child_pid;
// 创建子进程并等待
child_pid = fork();
if (child_pid > 0) { // 父进程
sleep(5); // 暂停5秒
system("your_second_program"); // 执行第二个程序
char confirm;
printf("Do you want to continue? (Y/N): ");
scanf("%c", &confirm);
if (confirm == 'Y' || confirm == 'y') {
show_process_info(child_pid);
} else {
printf("Exiting...\n");
}
} else if (child_pid == 0) { // 子进程
show_process_info(getpid()); // 显示当前进程信息
_exit(0); // 结束子进程
} else {
perror("Fork failed");
exit(1);
}
return 0;
}
```
请注意,这个例子假设你有一个名为 `your_second_program` 的程序,并且 `/tmp/process_info.txt` 文件用于存储进程信息,你需要确保它们存在并且有适当的权限。此外,实际应用中可能会需要处理更多错误情况。
阅读全文