De fondo
Como un adicto a la terminal, he empezado a jugar con una combinación de mpd (Music Player Daemon) y un jugador, ncmpcpp (NCurses Media Player Cliente C++).
He instalado estos a través de Homebrew una simple brew install mpd ncmpcpp
. Un poco de configuración más tarde, y las aplicaciones que están funcionando bastante bien. El efecto es realmente impresionante:
El problema que me encuentro es que cuando quiero ejecutar mpd
automáticamente en lugar de tener que lanzar en mi terminal. Viene con un launchd
plist, así que tengo que instalar, y parece que funciona - El problema es que lo estoy jugando, se que es un MP3, streaming de audio desde un servidor, o lo que sea, el audio se entrecorta cada 5 segundos
Esto absolutamente no ocurre cuando mpd
se invoca directamente desde la línea de comandos, sólo cuando es disparado a través de launchd.
Aquí está lo que el plist parece:
<!--homebrew.mxcl.mpd.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>KeepAlive</key>
<true/>
<key>Label</key>
<string>homebrew.mxcl.mpd</string>
<key>ProcessType</key>
<string>Interactive</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/mpd/bin/mpd</string>
<string>--no-daemon</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/usr/local</string>
</dict>
El ProcessType interactive
fue agregado por mí en un intento de obligar a launchd para dar el demonio de mayor prioridad, a ningún efecto.
La depuración?
Si nos dtruss
el proceso, hay una gran explosión de idéntica gettimeofday
mensajes correlacionada con cada tartamudeo. Se parece a esto:
gettimeofday(0x10A03FD40, 0x0, 0x1000) = 1428698761 0
Cosas que ya he eliminado
- De la CPU y de e / s de Disco
El sistema es relativamente tranquila - durante el tartamudea, mpd no está ni siquiera en el top 25 de la memoria o el uso de la CPU, y la carga es muy por debajo de 1.0
- Incorrecta medio ambiente, causando mala config para ser cargado
Mi mpd config es el único ser cargado desde ~/.mpdconf
- mismo que cuando ejecuto a mano.
Este parece ser un síntoma de la forma launchd elige para manejar el proceso.
La última pregunta
¿Por qué el demonio y entonces se portan mal cuando se ejecuta bajo launchd, pero no cuando se ejecuta a través de la terminal?
Pregunta extra:
¿Qué acerca de la forma en que launchd comienza procesos podrían estar haciendo este comportamiento manifiesto?