我该如何终止system()?

时间:2014-06-14 20:47:05

标签: c unix sh

从C程序中,我通过运行system()来调用脚本文件(.sh)。

#include <stdio.h>
#include <stdlib.h>

int main()
{

system("/home/root/Server_video.sh");

}

我想一次又一次地停止/开始运行脚本文件(例如,运行60秒,终止,运行60秒,......)。这是因为脚本文件运行视频服务器,随着时间的推移增加了延迟。

实施此方法的方法是什么?我是新手,任何帮助都会受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

使用fork(2) / exec(3) / wait(2) / kill(2)而不是system(3),您就可以实现您的“{3}}”。重新尝试。

答案 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脚本。)