установить имя для спящего процесса в оболочке - PullRequest
0 голосов
/ 15 ноября 2018

Я новичок в Linux, и у меня есть задача написать скрипт для автоматизации какой-либо работы

В настоящее время у меня есть скрипт (runme.csh) с таким содержимым

#!/bin/csh -f

read some settings from a file>

while (some condition)

< do some work >

sleep 600

end

Теперь мне нужно несколько раз запустить копии скрипта (скопировать скрипт в новое имя файла и запустить) на одной и той же оболочке [tcsh]

пример

[aruna>] runme1.csh &

[aruna>] runme2.csh &

[aruna>] runme3.csh &

Теперь, если я хочу убить один прогон, я могу сделать ps, найти PIDсоответствующего сценария по его имени и убить.Однако я не могу найти pid команды sleep, которую выполнил сценарий.

Есть ли способ дать имя процессу sleep, чтобы я мог видеть, какой процесс sleep выполняется каким сценарием?

Спасибо:)

1 Ответ

0 голосов
/ 15 ноября 2018

Кажется, что вы не можете правильно сделать это, используя только bash, так как exec -a foo sleep 100 по-прежнему отображается как sleep при использовании ps:

[~ ]$ ps -u corion
   PID TTY          TIME CMD
...
101468 pts/8    00:00:00 bash
101494 pts/8    00:00:00 sleep

Но используя Perl, выможет легко изменить имя процесса, потому что Perl поддерживает присваивание $0 (имя процесса в Perl):

perl -wle '$0=shift;sleep shift' sleeper 100

[~ ]$ ps -u corion
   PID TTY          TIME CMD
...
100740 pts/8    00:00:00 bash
104067 pts/8    00:00:00 sleeper

Приведенный выше oneliner меняет имя на первый заданный аргумент и затем спитстолько секунд, сколько дается второй аргумент.

...