首页 > 解决方案 > 在不阻塞当前执行的情况下从 ac 程序启动和停止 linux shell 命令

问题描述

while(variable > 0){
  updatevariable(); //variable gets updated from UDP serevr.
  // i want to execute a shell command here without blocking current execution. 
}

我尝试使用 system() 函数,但它阻止了当前执行,如果条件不满足,我应该能够停止 shell 命令,并且不应该等到 shell 命令完成执行。(我使用的 shell 命令是 rtl_fm 并且在我们手动停止它之前它不会停止执行)。我正在专门为 linux 操作系统编写这段代码。而且我确切地知道变量低于0的时间。有没有办法在一段时间内执行shell命令?

还没试过进程,线程呢。PS:这是我在这个平台上的第一个问题。

标签: crtl-sdr

解决方案


您需要使用 fork 或 clone 创建一个新进程

int clone(int (*fn)(void *), void *stack, int flags, void *arg, ...
             /* pid_t *parent_tid, void *tls, pid_t *child_tid */ );

(如果您需要更精确地控制在调用进程“父”和子进程之间共享哪些执行上下文。请参阅clone_man_pages然后您可以发送新创建的子进程以运行其他代码(无需等待或阻塞当前的 shell ). 这是通过 exec 系统调用族exec_family_man_pages 完成的


推荐阅读