OpenGroup Unix规范claims pthread_kill()
是异步信号安全的。但是Linux man 7 signal并未在相关部分中列出此功能。
那么,在Linux上的信号处理程序中调用pthread_kill
是否安全?我知道它是使用tgkill()
来实现的(这是安全的……但这也不会自动使pthread_kill()
变得安全)。
一些背景:
O_ASYNC/F_SETOWN_EX/F_SETSIG
将SIGRTMIN信号定向到I / O准备就绪的特定线程... sigwaitinfo()
)编辑:信号处理线程将收到的SIGIO视为“我们有活动,但不知道在哪里-检查每个文件描述符”。不理想,但是比完全丢失信号要好。
编辑2:必须进行一些设计更新(出于某些不可思议的原因,我认为SIGIO是实时信号)。
答案 0 :(得分:0)
在这里总结Craig Estey的答案(谢谢,伙计!)
在全部(最近)的手册页中def AddHostPortgroup(self,host, vswitchName, portgroupName):
portgroup_spec = vim.host.PortGroup.Specification()
portgroup_spec.vswitchName = vswitchName
portgroup_spec.name = portgroupName
network_policy = vim.host.NetworkPolicy()
network_policy.security = vim.host.NetworkPolicy.SecurityPolicy()
network_policy.security.allowPromiscuous = True
network_policy.security.macChanges = False
network_policy.security.forgedTransmits = False
portgroup_spec.policy = network_policy
host.configManager.networkSystem.AddPortGroup(portgroup_spec)
被列为异步信号安全的。 glibc来源中有一条评论说,在pthread_kill
存在的情况下这是不安全的,因此,如果您感到偏执,可以使用fork()
。
是的,tgkill(getpid(), <thread-id>, <signal-id>)
和pthread_kill
都应该没问题。
在我的CentOS 7上,tgkill
并没有列出其中的任何一个是安全的,但这很可能是因为它太旧了。