tartamudeo de mpd cuando se ejecuta en launchd

2

Fondo

Como adicto a la terminal, comencé a jugar con una combinación de mpd (Music Player Daemon) y un jugador, ncmpcpp (NCurses Media Player Client C ++).

Los instalé a través de Homebrew, un simple brew install mpd ncmpcpp . Un poco de configuración más tarde, y las aplicaciones se están ejecutando bastante bien. El efecto es en realidad bastante impresionante:

Elproblemaqueencuentroescuandoquieroejecutarmpdautomáticamenteenlugardetenerloenmiterminal.Vieneconunlaunchdplist,asíqueinstaloeso,yparecequefunciona.Elproblemaesquesealoqueseaqueestéreproduciendo,yaseaunMP3,transmisióndeaudiodesdeunservidor,oloquesea,elaudiotartamudeacada5segundos

Estonoocurreabsolutamentecuandoseinvocampddirectamentedesdelalíneadecomandos,solocuandosedisparamediantelaunchd.

Asíescomoseveelplist:

<!--homebrew.mxcl.mpd.plist--><?xmlversion="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 forzar a launchd para darle mayor prioridad al daemon, sin ningún efecto.

¿Depurando?

Si dtruss del proceso, hay una gran explosión de mensajes gettimeofday idénticos correlacionados con cada tartamudeo. Se parece a esto:

gettimeofday(0x10A03FD40, 0x0, 0x1000)       = 1428698761 0

Cosas que ya he eliminado

  • CPU / Disk IO

El sistema es relativamente silencioso: durante los tartamudos, mpd ni siquiera se encuentra entre los 25 primeros para el uso de la memoria o la CPU, y la carga está muy por debajo de 1.0

  • El entorno incorrecto hace que se carguen las configuraciones de configuración incorrectas

Mi configuración de mpd es la que se carga desde ~/.mpdconf , igual que cuando lo ejecuto a mano.

Esto parece ser un síntoma de la forma en que Launchd elige manejar el proceso.

La última pregunta

¿Por qué el demonio es tan malo cuando se ejecuta en launchd, pero no cuando se ejecuta a través de terminal?

Pregunta de bonificación:

¿Qué pasa con la forma en que Launchd da inicio a los procesos podría estar manifestando este comportamiento?

    
pregunta Mikey T.K. 10.04.2015 - 22:30

1 respuesta

1

Tuve un problema similar y Google me llevó a este hilo. Ahora tengo una solución al problema si alguien más encuentra esto.

Simplemente elimina la línea --no-daemon .

Esto parece funcionar bien:

<?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>homebrew.mxcl.mpd</string>
    <key>WorkingDirectory</key>
    <string>/usr/local</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/opt/mpd/bin/mpd</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>
    
respondido por el Gustaf Ekeberg 09.12.2015 - 15:37

Lea otras preguntas en las etiquetas