shell 睡眠函数
时间: 2024-06-07 13:12:07 浏览: 53
Shell 函数是在 shell 脚本中定义的一组命令的集合。可以通过在脚本中调用函数来执行这些命令。它们可以带有参数,并且可以在脚本中多次调用。格式如下:
```
function function_name {
commands
}
```
调用函数:
```
function_name
```
相关问题
编写C语言程序fork6-9.c,完成以下功能:父进程创建子进程, 子进程完成两个功能1)把shell命令“ls -l /bin”命令的执行结果显示出来,2)调用shell程序add6-9.sh,睡眠3秒,退出,然后父进程等子进程退出后,输出“child is over”。shell程序add6-9.sh是输出1+2+..+1202的总和。
下面是一个符合要求的C语言程序,实现了创建子进程,子进程执行shell命令和调用shell程序的功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int status;
pid = fork(); // 创建子进程
if (pid == -1) { // 创建进程失败
printf("Failed to create child process!\n");
return 1;
}
if (pid == 0) { // 子进程
printf("Child process is running...\n");
// 执行shell命令
system("ls -l /bin");
// 调用shell程序
system("./add6-9.sh");
printf("Child process is finished!\n");
exit(0); // 退出子进程
} else { // 父进程
printf("Parent process is running...\n");
waitpid(pid, &status, 0); // 等待子进程结束
printf("Child is over.\n");
}
return 0;
}
```
在子进程中,我们使用了`system()`函数来执行shell命令和调用shell程序。`system()`函数会调用shell进程来执行命令,返回值为命令的退出状态码。在本程序中,我们没有使用返回值,因此可以忽略。在shell程序中,我们使用了`sleep()`函数来使程序休眠3秒。
您需要将上述代码保存为fork6-9.c文件,并将add6-9.sh文件放在同一目录下,然后通过编译器编译运行即可。
用C语言编程实现linux操作系统中shell命令行的sleep命令。 生成的可执行程序统一用sleepy命名,参数为sleep的秒数n;也可以没有参数,这时程序每秒执行一次,直到用户强制退出; 需要有usage函数,即命令调用失败后,给用户的用法提示; 在调用usage函数时,需要显示当前所调用命令的名称,而默认的argv[0]会给出命令的绝对路径,编写一个StripPath函数,使只显示相对路径。 要求在正确结果输出时,能够显示当前进程的pid。结果格式见下文。
以下是实现sleepy命令的C代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <libgen.h>
void usage(char *name) {
printf("Usage: %s [seconds]\n", basename(name));
}
char *strip_path(char *path) {
char *p = strrchr(path, '/');
if (p == NULL) {
return path;
} else {
return p + 1;
}
}
int main(int argc, char **argv) {
pid_t pid = getpid();
if (argc > 2) {
usage(argv[0]);
return 1;
}
int seconds = 1;
if (argc == 2) {
seconds = atoi(argv[1]);
if (seconds <= 0) {
usage(argv[0]);
return 1;
}
}
printf("[%d] %s started with %d seconds\n", pid, strip_path(argv[0]), seconds);
while (seconds > 0) {
sleep(1);
seconds--;
}
printf("[%d] %s finished\n", pid, strip_path(argv[0]));
return 0;
}
```
该程序首先检查参数个数,如果没有参数,则每秒执行一次,直到用户强制退出。如果有一个参数,则将其转换为整数作为睡眠秒数。如果参数个数大于2,则调用usage函数打印用法提示并退出程序。
在打印用法提示时,使用basename函数将绝对路径转换为相对路径。这里使用了一个自定义的strip_path函数实现这个功能。
在正确结果输出时,使用getpid函数获取当前进程的pid,并将其和程序名称和参数一起输出。
最后,使用sleep函数实现睡眠,并在睡眠结束后输出完成信息。
阅读全文