linux - 如何在 C 代码中从其中一个进程触发时重新启动一组进程

标签 linux bash shell exec fork

我有几个用 C 编写的进程 *.rt。

我想在进程 foo.rt(*.rt 之一)本身(内置 C 代码)中重新启动所有这些(*.rt)

通常我有 2 个 bash 脚本 stop.sh 和 start.sh。这些脚本是从 shell 调用的。

这里是脚本的工作人员 stop.sh --> 向所有“.rt”文件发送kill -9 信号。 start.sh -->调用名为“.rt”的进程

我的问题是如何从 C 代码重新启动所有 rt。有没有什么想法可以重新启动从 foo.rt 文件触发的所有“*.rt”文件?

我尝试在 foo.rt 中使用它,但它不起作用。 *因为 stop.sh 正在杀死所有 .rt 文件,即使它是作为子文件 fork 并部署来执行 start.sh 脚本的

...
case 708: /* There is a trigger signal here*/
    {
        result = APP_RES_PRG_OK;
        if (fork() == 0) { /* child */
           execl("/bin/sh","sh","-c","/sbin/stop.sh",NULL);
           execl("/bin/sh","sh","-c","/sbin/start.sh",NULL);// Error:This will be killed by /sbin/stop command
           }
     }

最佳答案

我已经解决了 Linux 中“at”守护进程的问题

我调用了 2 个 system() 调用停止和启动。

如上所述,我的第一次尝试是错误的。 execl 生成一个新的镜像,除非成功,否则永远不会返回到后面的 execl

这是我的解决方案

case 708: /*There is a trigger signal here*/
{
            system("echo '/sbin/start.sh' | at now + 2 min");
            system("echo '/sbin/stop.sh  | at now + 1 min");
 }

关于linux - 如何在 C 代码中从其中一个进程触发时重新启动一组进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25592474/

相关文章:

c - C 向数组中添加数据

linux - crontab 路径和用户

python - 我无法在 Anaconda 2.3.0 中导入 sklearn

linux - 如何从命令提示符关闭 gvim

linux - 不同ksh环境下的赋值变量

c - 如何从特定目录调用 system()?

linux - 用于启动 Chromium 的 Bash 脚本,休眠 20 秒,然后安静地关闭

linux - 如何在 Linux 上运行命令并将输出保存在变量中

linux - 循环文本文件和 grep

C - 将 CD 添加到 Shell