我想使用system()
来执行cmd。
如果cmd需要很长时间,如ping
,它将阻止主线程。
所以我想创建一个子线程来处理它。在这个子线程中,将调用system()
。
众所周知,system()
会分叉一个子进程。
我不确定在子线程中调用system()
时是否有任何问题或副作用。
答案 0 :(得分:2)
system()
标记为线程安全。请参阅man page。但有一点需要注意:
根据POSIX.1,未指定处理程序是否已注册 在执行system()期间调用使用pthread_atfork(3)。 在glibc实现中,不会调用这样的处理程序。
根据你的描述,你可能没有atfork处理程序,所以没关系。
我想使用system()来执行cmd。如果cmd需要很长时间,比如ping,它将阻塞主线程。
但是,如果使用单独线程的唯一目的是运行命令,为什么不直接fork(2)
并让它子进程执行exec命令?
主要流程仍然可以继续,并可以检查子流程是否已完成(例如,使用waitpid
WNOHANG
)。
在我看来这会更清晰,并避免fork +线程的复杂性。