在shell中为睡眠进程设置一个名称

时间:2018-11-15 04:18:26

标签: shell process sleep

我是linux的新手,其任务是编写脚本以使某些工作自动化

目前,我有一个脚本(runme.csh),其内容是这样的

#!/bin/csh -f

read some settings from a file>

while (some condition)

< do some work >

sleep 600

end

现在我需要在同一shell [tcsh]上多次运行脚本副本(将脚本复制到新文件名并运行)

示例

[aruna>] runme1.csh&

[aruna>] runme2.csh&

[aruna>] runme3.csh&

现在,如果我想终止一次运行,则可以执行ps,并通过其名称找到相应脚本的PID并终止。但是我无法找到脚本执行的sleep命令的pid。

有没有一种方法可以给睡眠过程起个名字,以便我可以看到哪个睡眠过程是由哪个脚本执行的?

谢谢:)

1 个答案:

答案 0 :(得分:0)

您似乎无法单独使用bash来完成此操作,因为使用exec -a foo sleep 100sleep仍显示为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将名称更改为给定的第一个参数,然后休眠与给定的第二个参数一样多的时间。