c - 在不阻塞当前执行的情况下从 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:这是我在这个平台上的第一个问题。
解决方案
您需要使用 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 完成的
推荐阅读
- javascript - Django响应将json设置为cookie
- java - 如何在Nodejs(如Java)中将字符串转换为字节数组
- python - 如何反转标签的 One-Hot Encoding 以评估 ML/DL 模型?
- flutter - 如何在 Flutter 中通过卡片点击打开另一个页面
- javascript - 是否有更新实时烛台图表的示例?
- nginx - 在 Nginx 中为某些 IP 禁用缓存控制
- javascript - 如何使用 parsimmon.js 解析 jsDoc 注释?
- c++ - 当调用函数中捕获到异常时,如何确保在函数内删除数组?
- python - DJANGO REST FRAMEWORK 中的注册问题
- spring - 在哪个场景中,我们在 applicationContext 上调用 refresh(),start() 和 refresh() 方法有什么区别?