gpt4 book ai didi

c++ - Linux system() 调用偶尔会阻塞

转载 作者:IT王子 更新时间:2023-10-29 00:53:52 26 4
gpt4 key购买 nike

我们有一个多线程嵌入式应用程序,由于硬件限制过于普通,无法在此讨论,无论何时输出到文件,都必须将其文件系统重新挂载为 RW。

我们目前正在通过调用 system() 并运行 mount 命令来执行此操作。但是,此调用有时会阻塞,并导致应用程序陷入死锁。

在调试过程中,我将 system(NULL) 放置在原始 system() 调用之前,这似乎有时也会阻塞。

一般来说,在什么情况下 system() 可能永远阻塞?

最佳答案

这是 Linux 吗?在 Linux 上的 glibc 中,system() 会阻止 SIGCHLD,更改几个信号处理程序, fork ,等待子进程死亡,然后修复它对信号掩码所做的操作。在子进程中,它撤消信号掩码更改并执行 shell 以运行您的命令。当您调用 system(NULL) 时甚至会发生这种情况——唯一的区别是被调用的 shell 被称为 sh -c exit 0。

总之,您正在生成一个进程,加载 shell(及其所有关联的库),并等待 shell 结束。加载 shell 可能会被咬伤。

关于c++ - Linux system() 调用偶尔会阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13589815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com