pidof -x test.sh
deve fornecer o que você precisa para obter o PID.
Na página do manual,
-x Scripts too - this causes the program to also return process id's of shells running the named scripts.
Aqui está o meu teste,
tony@trinity:~$ ls -l testit.sh
-rwxr-xr-x 1 tony tony 83 Jan 5 14:53 testit.sh
tony@trinity:~$ ./testit.sh
1000
999
998
997
enquanto isso
tony@trinity:~$ ps -ef | grep testit.sh
tony 4233 20244 0 14:58 pts/5 00:00:00 /bin/bash ./testit.sh
tony 4295 3215 0 14:58 pts/6 00:00:00 grep --color=auto testit.sh
e depois
tony@trinity:~$ pidof -x testit.sh
4233
Sua consulta posterior é um problema comum, uma solução é
ps aux | grep test.sh | grep -v grep
que deve fornecer apenas uma linha (supondo que test.sh
seja exclusivo).
E por último, no seu comando final, você não está apenas passando um único PID, você está passando uma linha inteira de texto, e não é assim que ps
espera receber um PID de qualquer maneira (espera que o PID depois de -p
).
Por exemplo,
tony@trinity:~$ ps aux | grep testit.sh
tony 4233 0.1 0.0 4288 1276 pts/5 S+ 14:58 0:00 /bin/bash ./testit.sh
tony 5728 0.0 0.0 3476 760 pts/6 S+ 15:04 0:00 grep --color=auto testit.sh
Então, precisamos fazer um grep no grep e retornar o pid.
tony@trinity:~$ ps aux | grep testit.sh | grep -v grep | awk '{print $2}'
4233
então,
tony@trinity:~$ ps -o stat --no-headers -p $(ps aux | grep testit.sh | grep -v grep | awk '{print $2}')
S+
Provavelmente há muitas maneiras menos complicadas de chegar lá, mas eu queria mostrar o progresso.