如何在MacOS / BSD上增加最大信号量限制

问题描述

我想增加可以同时打开的信号灯的最大数量

我知道可以通过以下方式检索当前限制

long nsems_max = sysconf(_SC_SEM_NSEMS_MAX);

或通过控制台通过

ipcs -S

semmap:     30  (# of entries in semaphore map)
semmni:      8  (# of semaphore identifiers)
semmns:    128  (# of semaphores in system)
semmnu:      0  (# of undo structures in system)
semmsl:  87381  (max # of semaphores per id)
semopm:      5  (max # of operations per semop call)
semume:     10  (max # of undo entries per process)
semusz:     32  (size in bytes of undo structure)
semvmx:  32767  (semaphore maximum value)
semaem:  16384  (adjust on exit max value)

在Linux上,可以通过手动编辑来更改限制

/proc/sys/kernel/sem

,但这不适用于MacOS / BSD。如何在Mac上更改/增加限制?

解决方法

以下变量可通过/usr/sbin/sysctl(适用于当前会话)进行编辑,或者您可以创建 plist 以始终在重新启动时设置值。您必须创建文件。

sudo vi /Library/LaunchDaemons/sysctl.plist`

根据您的心愿设置它们。

/Library/LaunchDaemons/sysctl.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Label</key>
 <string>sysctl</string>
 <key>ProgramArguments</key>
 <array>
   <string>/usr/sbin/sysctl</string>
   <string>-w</string>
   <string>kern.sysv.semmni=87381</string>
   <string>kern.sysv.semmns=87381</string>
   <string>kern.sysv.semmnu=87381</string>
   <string>kern.sysv.semmsl=87381</string>
   <string>kern.sysv.semume=10</string>
   <string>kern.posix.sem.max=10000</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
</dict>
</plist>

然后加载:

launchctl load /Library/LaunchDaemons/sysctl.plist