当前位置: 技术问答>linux和unix
一个程序运行30秒,然后就KILL,然后一个小时后再开始运行
来源: 互联网 发布时间:2016-04-05
本文导语: 我是用sleep和signal来做定时运行,因为对时间要的求不是很精确。test case的话,只想让tshark运行30秒,然后tshark被kill pid,然后等10分钟,tshark程序再运行 但是我是在程序里用SYSTEM来发命令的,所对好像是在定时器这...
我是用sleep和signal来做定时运行,因为对时间要的求不是很精确。test case的话,只想让tshark运行30秒,然后tshark被kill pid,然后等10分钟,tshark程序再运行
但是我是在程序里用SYSTEM来发命令的,所对好像是在定时器这些方面有问题,程序运行了没反响,用ps查看,一直在运行,只用kill pid还杀不掉,只能kill -9了。
我在main()里是这么写的
system("tshark >& logtext.txt &echo $! > tsharkpid"); // 发tshark命令,写pid到文件里
sleep(30); //让tshark运行30秒,
sigqueue(getpid(), 50, tsval);//恢复运行
system("kill `cat tsharkpid`"); //kill tshark by pid
sleep(600); //让主程序等十分钟后再运行,
sigqueue(getpid(), 50, tsval);//恢复运行
但是我是在程序里用SYSTEM来发命令的,所对好像是在定时器这些方面有问题,程序运行了没反响,用ps查看,一直在运行,只用kill pid还杀不掉,只能kill -9了。
我在main()里是这么写的
system("tshark >& logtext.txt &echo $! > tsharkpid"); // 发tshark命令,写pid到文件里
sleep(30); //让tshark运行30秒,
sigqueue(getpid(), 50, tsval);//恢复运行
system("kill `cat tsharkpid`"); //kill tshark by pid
sleep(600); //让主程序等十分钟后再运行,
sigqueue(getpid(), 50, tsval);//恢复运行
|
使用crontab工具。
|
你怎么会要求自己把自己杀死后还能自己运行起来?
你要有个守护进程在就OK了
|
为什么要你那样呢?
在你的/etc/crontab 里面加入守护程序就可以了!
在你的/etc/crontab 里面加入守护程序就可以了!
|
Ctrl+Z不是结束程序,而是使程序在后台运行!ctrl+C才是结束程序
|
写个Shell。判断是否有该进程,根据判断结果做相应处理,在crontab中实现对于时间的控制。
或者直接用crontab直接实现,但有可能会出现多进程的问题。
或者直接用crontab直接实现,但有可能会出现多进程的问题。