gpt4 book ai didi

c - 从多线程进程调用 system(3) 是否安全?

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

system()函数是使用fork()execve()wait()实现的功能。我听说 fork() 函数在多线程程序中很危险。那么,system()函数在多线程程序中是否也有危险呢?

可能会导致什么问题?

最佳答案

system() 函数不一定是线程安全的。

POSIX.1-2008 specifies (以及 POSIX.1-2001):

The system() function need not be thread-safe.

例如,Solaris 10 documents system() as thread-unsafe :

The system() function manipulates the signal handlers for SIGINT, SIGQUIT, and SIGCHLD. It is therefore not safe to call system() in a multithreaded process, since some other thread that manipulates these signal handlers and a thread that concurrently calls system() can interfere with each other in a destructive manner.

此手册页还建议将 popen() 作为线程安全的变通方法。请注意,popen() 不会更改任何信号处理程序。

在 Linux 上,system() is thread-safe .

请注意 system() 不一定调用 fork()。一个实现可以使用 vfork(),而不是。或者,在 Linux 上,它可以直接调用 clone()。它甚至可以使用 posix_spawn()

虽然forking in a multi-threaded program can be challenging , 通常,紧跟在 exec 之后的 fork 是安全的(取模打开文件描述符)。

关于c - 从多线程进程调用 system(3) 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13471489/

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