【发布时间】:2017-01-06 14:50:54
【问题描述】:
我正在开发一个程序来使用 system() 启动一个长时间运行的进程(afplay,带有长声音文件),稍后可能决定终止这个进程。调用 system("prog") 调用,然后调用 system("killall prog") 似乎很简单。使用 pthreads,我启动一个线程来调用初始 system("prog") 调用,然后如果应用程序检测到它提前终止的时间,主线程将调用 system("killall prog")。通过打印语句,我可以看到主线程正确检测到要停止的逻辑,但后续系统调用会阻塞,直到原始系统调用完成(主线程似乎直到此时才阻塞,其他活动确实通过线程进行创建初始系统调用)。如果我在我的程序调用 prog 后从单独的 shell 中尝试 killall,killlall 可以工作(如您所料)。我知道 macOS 对与 ui 库交互的程序有要求,只需要从主线程处理此类活动。向 system(3) 发送的程序是否还有其他我不知道的要求?
在 Windows 上,代码中的唯一区别是“prog”的选择,并且行为按我的预期工作。
【问题讨论】:
标签: macos pthreads posix system-calls