程序设计。用execl 函数创造进程 1s-1,用execvp 函数创造进程 ps -ef。 提示: 显示当前目录下的文件信息可执行以下语句: (1) execl("/bin/ls", "Is", "-al", NULL) (2) char *arg[] = '"ps", "-ef", NULL): execvp ("ps", arg) ;
时间: 2023-06-06 10:06:21 浏览: 90
可以回答你的问题。对于第一个进程,你可以使用execl函数来创建,代码如下:
```
#include <unistd.h>
#include <stdio.h>
int main() {
while (1) {
execl("/bin/sleep", "sleep", "1", NULL);
}
return 0;
}
```
这个进程会不断地执行sleep命令,每隔一秒钟就会停止执行。
对于第二个进程,你可以使用execvp函数来创建,代码如下:
```
#include <unistd.h>
#include <stdio.h>
int main() {
char *args[] = {"ps", "-ef", NULL};
while (1) {
execvp(args[0], args);
}
return 0;
}
```
这个进程会不断地执行ps命令,显示当前系统中所有进程的详细信息。
请注意,这两个进程会不断地执行,直到你手动结束它们或者重启系统。因此,你可能会需要在执行这些程序之前先备份你的数据。
相关问题
使用execl()函数,在子进程内运行ps -ef命令
可以使用 execl() 函数在子进程内运行 ps -ef 命令。这里是一个示例程序:
```
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid = fork();
if (pid == 0) {
// 子进程中调用 execl() 函数运行 ps -ef 命令
execl("/bin/ps", "ps", "-ef", NULL);
// execl() 函数只有在出错时才会返回,因此如果程序执行到这里说明出错了
perror("execl error");
_exit(1);
} else if (pid > 0) {
// 父进程中等待子进程结束
waitpid(pid, NULL, 0);
} else {
perror("fork error");
return 1;
}
return 0;
}
```
在子进程中,我们调用 execl() 函数来运行 ps -ef 命令。第一个参数是命令的路径,第二个参数是命令名,第三个参数是命令的参数列表,最后一个参数必须是 NULL,用于表示参数列表的结束。
注意,如果 execl() 函数返回,说明出错了,此时我们需要调用 perror() 函数来输出错误信息,并使用 _exit() 函数来退出子进程。另外,在父进程中,我们需要调用 waitpid() 函数等待子进程结束。
用exec函数创建一个进程,显示当前目录下的文件信息。
exec 函数族中的函数是用来启动一个新进程并在新进程中执行另一段程序的,它们会将当前进程替换为新进程。所以,如果我们要使用 exec 函数族中的函数来创建一个新的进程并显示当前目录下的文件信息,我们需要先创建一个新进程,然后在新进程中执行 ls 命令来显示文件信息。
下面是一个使用 execl 函数创建一个进程并显示当前目录下的文件信息的示例:
```c
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
int main()
{
pid_t pid = fork(); // 创建一个新进程
if (pid == -1) { // fork 失败
printf("Error: fork() failed.\n");
return errno;
} else if (pid == 0) { // 子进程
if (execl("/bin/ls", "ls", "-l", NULL) == -1) { // 在子进程中执行 ls 命令
printf("Error: execl() failed.\n");
return errno;
}
} else { // 父进程
printf("Child process ID: %d\n", pid);
}
return 0;
}
```
在上面的代码中,我们首先调用了 fork 函数来创建一个新进程,然后在子进程中使用 execl 函数来执行 ls 命令。execl 函数的第一个参数是要执行的程序的路径,第二个参数是程序的名称,第三个参数是要传递给程序的参数列表,最后一个参数必须是 NULL。如果 execl 函数执行成功,那么子进程就会被 ls 命令替换。如果 execl 函数执行失败,那么就会返回 -1,并输出错误信息。在父进程中,我们输出了子进程的进程 ID。