【问题标题】:start and stop a linux shell command from a c program without blocking current execution在不阻塞当前执行的情况下从 c 程序启动和停止 linux shell 命令
【发布时间】:2020-08-16 19:03:38
【问题描述】:
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 OS 编写这段代码。 而且我确切地知道变量低于0的时间。有什么办法可以在一段时间内执行shell命令?

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

【问题讨论】:

  • 你想要fork-exec
  • 谢谢。创建了一个子进程并使用了 execvp(),我可以完全按照我的意愿去做。

标签: c rtl-sdr


【解决方案1】:

你需要用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 然后您可以发送新创建的子进程以运行其他代码(无需等待或阻止您当前的外壳)。这是通过 exec 系统调用系列 exec_family_man_pages

完成的

【讨论】:

  • 感谢您的帮助。通过使用 fork 和 execvp() 解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多