从C程序中,我通过运行system()
来调用脚本文件(.sh)。
#include <stdio.h>
#include <stdlib.h>
int main()
{
system("/home/root/Server_video.sh");
}
我想一次又一次地停止/开始运行脚本文件(例如,运行60秒,终止,运行60秒,......)。这是因为脚本文件运行视频服务器,随着时间的推移增加了延迟。
实施此方法的方法是什么?我是新手,任何帮助都会受到高度赞赏。
答案 0 :(得分:2)
答案 1 :(得分:1)
正如Carl Norum所说,你不能使用系统,而是需要使用fork,exec和kill。这是一个例子。
C计划
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
int main() {
pid_t pid;
int i;
for (i = 0; i < 3; ++i) { // repeat 3 times
char str[10];
sprintf(str, "%d", i);
pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0) {
execlp("./script.sh", "script.sh", str, NULL);
perror("exec");
exit(EXIT_FAILURE);
}else{
sleep(5); // let script run for 5 seconds
kill(pid, SIGKILL);
printf("--- parent\n");
}
}
return 0;
}
Shell脚本
#!/bin/sh
while :; do
echo "script $1"
sleep 1
done
<强>输出强>
$ ./a.out
script 0
script 0
script 0
script 0
script 0
--- parent
script 1
script 1
script 1
script 1
script 1
--- parent
script 2
script 2
script 2
script 2
script 2
--- parent
答案 2 :(得分:1)
如果你这样做是为了学习体验,那很好,但是没有其他理由在C中这样做。直接在shell中做这件事要容易得多。如果您想在shell中使用C 和,请尝试:
#include<stdlib.h>
int
main(void)
{
system( "while :; do /home/root/Server_video.sh & sleep 60; kill $!; done" );
return 0;
}
(请注意,这有点诙谐。只需直接使用shell脚本。)