当前位置: 技术问答>linux和unix
多个同名进程的问题--急解决
来源: 互联网 发布时间:2017-01-25
本文导语: 本人碰到一个难题,就是想做shell的进度条 比如说,我用tar 命令进行压缩文件,但是文件比较大,时间比较长,我想显示进度。 我有个想法是,把tar命令放在后台执行,然后通过ps来查看tar进程,如果有就显示#号,...
本人碰到一个难题,就是想做shell的进度条
比如说,我用tar 命令进行压缩文件,但是文件比较大,时间比较长,我想显示进度。
我有个想法是,把tar命令放在后台执行,然后通过ps来查看tar进程,如果有就显示#号,如果没有就显示完成,退出。
但是是现在一个问题就是,ps有可能会找到多个tar进程(属于一个用户或者多个用户),这样的话就要等到所有tar命令执行完成之后,才会显示成功。怎样解决这个问题呢?
怎样才能做到我执行的这个tar命令完成后马上显示成功呢?
有请高人来指点一下小弟,多谢啊!
比如说,我用tar 命令进行压缩文件,但是文件比较大,时间比较长,我想显示进度。
我有个想法是,把tar命令放在后台执行,然后通过ps来查看tar进程,如果有就显示#号,如果没有就显示完成,退出。
但是是现在一个问题就是,ps有可能会找到多个tar进程(属于一个用户或者多个用户),这样的话就要等到所有tar命令执行完成之后,才会显示成功。怎样解决这个问题呢?
怎样才能做到我执行的这个tar命令完成后马上显示成功呢?
有请高人来指点一下小弟,多谢啊!
|
在Shell脚本中,$!参数可以用来获取上一命令的进程号,你可以用该进程号协助判断tar进程,另一tar进程在该进程完成后又使用这个进程号的概率就很低了~
|
可以写一个简单的包装程序
子进程进行执行tar,当子进程结束的时候,会自动向父进程发送SIG_CLD信号
父进程设置信号处理函数,收到子进程退出信号后也随即退出,没收到的时候可以每隔一秒钟打印一个‘#’
子进程进行执行tar,当子进程结束的时候,会自动向父进程发送SIG_CLD信号
父进程设置信号处理函数,收到子进程退出信号后也随即退出,没收到的时候可以每隔一秒钟打印一个‘#’