loop - Bash espera el inicio del proceso
if bash (3)
Hay varios problemas con su código:
- pidof no imprime 0 o -1 si no hay proceso, por lo que su lógica es incorrecta
- pidof puede devolver múltiples pids si hay múltiples procesos, lo que rompería su comparación
-
>
tiene que ser escapado en[ ]
contrario su código es equivalente a[ $notepad ] > 0
, dirigiendo a un archivo. -
>
ni siquiera es el operador correcto. Querías-gt
, pero como se menciona en el punto 1 y 2, no deberías comparar números. -
until
ejecute el ciclo hasta que la condición sea verdadera. no espera a que la condición se vuelva verdadera y luego ejecuta el ciclo.
Así es como debes hacerlo:
# Wait for notepad to start
until pids=$(pidof notepad)
do
sleep 1
done
# Notepad has now started.
# There could be multiple notepad processes, so loop over the pids
for pid in $pids
do
taskset -p 03 $pid
renice -n 5 -p $pid
sleep 5
renice -n 0 -p $pid
done
# The notepad process(es) have now been handled
Estoy tratando de decirle a Bash, espere un Inicio / Inicio del Proceso. Lo estoy intentando de esta manera, por ejemplo:
notepad=`pidof notepad.exe`
until [ $notepad > 0 ]
do
taskset -p 03 $notepad
renice -n 5 -p $notepad
sleep 5
renice -n 0 -p $notepad
done
bueno, tengo las siguientes preguntas:
¿Por qué esto genera un archivo llamado "0" (el archivo está vacío)? No quiero hacer un nuevo archivo, simplemente espere a que el PID verifique la ejecución.
Esto es un bucle, pero si los 2 comandos son correctos, ¿cómo puedo continuar?
Para esto es mejor usar "hasta o cuando" ???
¿Otra idea para esperar Start o Begin?
Si entiendo correctamente, quiere esperar hasta que se abra el bloc de notas. Entonces el pidof debe estar dentro de tu loop.
while ! pidof notepad.exe >> /dev/null ;
do
sleep 1
done
notepad=$(pidof notepad.exe)
taskset -p 03 $notepad
renice -n 5 -p $notepad
sleep 5
renice -n 0 -p $notepad
Para responder a su primera pregunta: ''>'' no es el operador matemático / de comparación ''mayor que''; es la forma de bash de permitirle canalizar la salida a un archivo (manejar).
echo "some text" > myfile.txt
creará un archivo llamado myfile.txt, y ''>'' enviará la salida del comando a ese archivo. Me imagino que su archivo ''0'' tiene el pid en él, y nada más.
En su lugar, pruebe -gt
(o variantes relacionadas: -ge
, -lt
, -le
, -ne
, -ne
) para comprobar si un valor es mayor que (o: mayor que o igual, menor que, menor que o igual, igual , no igual, respectivamente) para ver si eso ayuda. Es decir,
until [ $notepad -gt 0 ]