Tengo un script que queremos ejecutar 2 programas al mismo tiempo, Uno de ellos es un programa de c y el otro es cpulimit, quiero empezar el programa en C en el fondo de la primera con «&» y, a continuación, obtener el PID del programa de C y de la mano a cpulimit que también se ejecutan en segundo plano con «&».

He intentado hacer esto más adelante y que comienza el primer programa y nunca se inicia cpulimit.

También estoy corriendo como un inicio de secuencia de comandos como root usando systemd en arch linux.

#!/bin/bash

/myprogram &

PID=$!

cpulimit -z -p $PID -l 75 &

exit 0
sleep 30 & PID=$! sleep $PID & ps -f Funciona muy bien para mí.
Estoy correcto asumir que la $! es el id del último comando ejecutado y por el uso de la variable PID soy capaz de acceder a ese valor?
Sí, lo es, en mi código de salida (puedes incluir varias líneas que faltan) hay dos bifurcada proceso. Una primera es el sueño de los 30 y la segunda un sueño 17568, que coincide con el pid de la primera sueño. Tal vez su myprogram es un shell que las horquillas de otro proceso?
Es posible que desee elegir un nombre de variable diferente. MY_PID=$!
¿Qué cpulimit hacer? Suena como algo que cumple con bastante rapidez, por lo que probablemente se ejecuta en segundo plano y las salidas antes de que usted pueda comprobar que tras el inicio de la secuencia de comandos completa.

OriginalEl autor Skilo Skilo | 2014-02-03

2 Comentarios

  1. 5

    Creo que tengo esta solucionado ahora, Según esta aquí: enlace tengo que envolver los comandos como este (comando) para crear una sub-shell.

    #!/bin/bash
    
    (mygprgram &)
    mypid=$!
    (cpulimit -z -p $mypid -l 75 &)
    
    exit 0
    El desove de una subshell, desde la cual lanzar un proceso en segundo plano, no es necesario.
    El & ya crea un subproceso…

    OriginalEl autor Skilo Skilo

  2. 2

    Acabo de encontrar esto, mientras que la búsqueda en google y quería añadir algo.

    Mientras que la solución parece estar funcionando (véase los comentarios sobre subshells), en este caso no es necesario obtener el pid. Sólo tiene que ejecutar el comando como este:

    cpulimit -z -l 75 myprogram &

    OriginalEl autor chris137

Dejar respuesta

Please enter your comment!
Please enter your name here