函数system()是否可以在线程中调用?

时间:2017-10-24 13:54:35

标签: c linux multithreading

我想使用system()来执行cmd。 如果cmd需要很长时间,如ping,它将阻止主线程。

所以我想创建一个子线程来处理它。在这个子线程中,将调用system()

众所周知,system()会分叉一个子进程。 我不确定在子线程中调用system()时是否有任何问题或副作用。

1 个答案:

答案 0 :(得分:2)

Linux / glibc文档将

system()标记为线程安全。请参阅man page。但有一点需要注意:

  

根据POSIX.1,未指定处理程序是否已注册       在执行system()期间调用使用pthread_atfork(3)。       在glibc实现中,不会调用这样的处理程序。

根据你的描述,你可能没有atfork处理程序,所以没关系。

  

我想使用system()来执行cmd。如果cmd需要很长时间,比如ping,它将阻塞主线程。

但是,如果使用单独线程的唯一目的是运行命令,为什么不直接fork(2)并让它子进程执行exec命令? 主要流程仍然可以继续,并可以检查子流程是否已完成(例如,使用waitpid WNOHANG)。 在我看来这会更清晰,并避免fork +线程的复杂性。