zapobiec uruchamianiu anonimowego procesu launchctl

2

Zainstalowałem dnsmasq i teraz chcę móc uruchomić go z launchctl. Problem polega na tym, że za każdym razem, gdy uruchamiam aplikację launchctl, rozpoczyna się anonimowy proces zamiast używania określonej etykiety.

10247   -   0x100107c30.anonymous.dnsmasq
-       0   com.example.dnsmasq

Ale chcę, żeby tak było

10247    0  com.example.dnsmasq

Problem z anonimowym procesem polega na tym, że nie mogę go zatrzymać za pomocą launchctl. Kiedy biegnę

launchctl stop com.example.dnsmasq

anonimowy proces wciąż pozostaje żywy.

Oto mój plik właściwości:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.example.dnsmasq</string>    
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/sbin/dnsmasq</string>
        <string>-p</string>
        <string>2155</string>
        <string>-R</string>
        <string>-A</string>
        <string>/.dev/127.0.0.1</string>
        <string>-x</string>
        <string>/usr/local/var/run/dnsmasq.pid</string>
    </array>
  <key>RunAtLoad</key>
  <false/>
  <key>KeepAlive</key>
  <false/>
</dict>
</plist>

Masz pomysł, jak to naprawić?

Mato
źródło
To pytanie zostało zadane na stosie przepełnienia stosu: link . Należy unikać cross-posting .
przepraszam, właśnie miałem go usunąć na SO. uważam, że ta strona byłaby lepszym miejscem dla tego rodzaju quenstions.
Mato,

Odpowiedzi:

6

To nie jest tak naprawdę launchctltworzenie nowego procesu; najprawdopodobniej dnsmasq sam. Jeśli fork()jest w tle, launchdnie można powiedzieć; wtedy, gdy mówi launchd, launchdtworzy dla niego anonimowy wpis. Upewnij się, że dnsmasqsamo tło nie jest w tle.

(Podana -dla zwykłego launchctl listwyjścia wskazuje, że dnsmasqproces oryginalny został zakończony.)

geekozaur
źródło
W szczególności należy dodać „-k” (lub „--keep-in-foreground”) do tablicy ProgramArguments. Po wykonaniu tej czynności możesz również zmienić KeepAlive na true (więc uruchomione uruchomi go ponownie, jeśli z jakiegoś powodu zakończy pracę).
Gordon Davisson,