编写一个linux程序,创建1个子进程,在子进程中列出/home/wanli/zs目录下以com开始、以tt结束的文件或子目录名,再等待3秒后终止子进程。父进程每秒钟检测子进程是否结束,若子进程未结束打印“The child process is not finished”,若子进程结束打印“The child process is finished”后结束。
时间: 2024-02-28 14:52:17 浏览: 84
Linux 创建子进程执行任务的实现方法
好的,这是一个简单的 Linux 程序,需要使用 C 语言编写。以下是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <dirent.h>
#include <string.h>
int main() {
pid_t pid = fork(); // 创建子进程
if (pid == -1) {
perror("fork error");
exit(EXIT_FAILURE);
} else if (pid == 0) { // 子进程
DIR *dir;
struct dirent *entry;
char *path = "/home/wanli/zs";
dir = opendir(path);
if (dir == NULL) {
perror("opendir error");
exit(EXIT_FAILURE);
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_DIR || entry->d_type == DT_REG) {
char *name = entry->d_name;
if (strncmp(name, "com", 3) == 0 && strncmp(name + strlen(name) - 2, "tt", 2) == 0) {
printf("%s\n", name);
}
}
}
closedir(dir);
sleep(3); // 等待 3 秒
exit(EXIT_SUCCESS);
} else { // 父进程
int status;
while (1) {
pid_t result = waitpid(pid, &status, WNOHANG);
if (result == -1) {
perror("waitpid error");
exit(EXIT_FAILURE);
} else if (result == 0) {
printf("The child process is not finished\n");
sleep(1); // 每秒钟检测一次
} else {
printf("The child process is finished\n");
exit(EXIT_SUCCESS);
}
}
}
return 0;
}
```
程序首先创建一个子进程,并在子进程中打开 `/home/wanli/zs` 目录,并列出以 `com` 开头、以 `tt` 结尾的文件或子目录名。然后子进程等待 3 秒后退出。
父进程每秒钟检测子进程是否结束,如果子进程未结束,打印信息并等待一秒钟。如果子进程已经结束,打印信息后退出。
在 Linux 终端中编译并运行该程序,可以使用以下命令:
```
gcc -o program program.c
./program
```
阅读全文