osx – 在一定时间后自动删除命令的命令行命令

前端之家收集整理的这篇文章主要介绍了osx – 在一定时间后自动删除命令的命令行命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在一定的时间后自动杀死命令。我想到一个这样的界面:
% constrain 300 ./foo args

这将运行“./foo”与“args”,但自动杀死它,如果它仍然在5分钟后运行。

将概念推广到其他约束可能是有用的,例如,如果它使用太多内存则自动杀死进程。

有没有任何现有的工具,或有任何人写这样的事情?

ADDED:Jonathan的解决方案正是我的想法,它的工作原理像linux上的魅力,但我不能让它工作在Mac OSX。我摆脱了SIGRTMIN,它让它编译正常,但信号只是不被发送到子进程。任何人知道如何使这项工作在Mac?

[添加:请注意,更新是可用的从乔纳森工作在Mac和其他地方。]

我已经到了晚了这个晚会,但我没有看到我最喜欢的技巧列在答案。

在* NIX下,警报(2)在execve(2)上继承,并且SIGALRM在默认情况下是致命的。所以,你可以经常简单:

$ doalarm () { perl -e 'alarm shift; exec @ARGV' "$@"; } # define a helper function

$ doalarm 300 ./foo.sh args

或者安装一个trivial C wrapper为你做。

优点只涉及一个PID,机制简单。例如,如果./foo.sh退出“太快”并重新使用其PID,则不会杀死错误的进程。你不需要几个shell子进程一起工作,这可以正确完成,但相当容易发生。

缺点时间有限的过程不能操纵其闹钟(例如,alarm(2),ualarm(2),setitimer(2)),因为这将很可能清除继承的警报。显然,它也不能阻止或忽略SIGALRM,尽管对于一些其他方法可以说SIGINT,SIGTERM等。

一些(非常老的,我认为)系统在报警(2)方面实现睡眠(2),并且,即使在今天,一些程序员使用报警(2)作为用于I / O和其他操作的粗略的内部超时机制。然而,在我的经验,这种技术适用于绝大多数你想限时的过程。

猜你在找的Bash相关文章