加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:31:49 所属栏目:安全 来源:网络整理
导读:我想在一定的时间后自动杀死命令。我想到一个这样的界面: % constrain 300 ./foo args 这将运行“./foo”与“args”,但自动杀死它,如果它仍然在5分钟后运行。 将概念推广到其他约束可能是有用的,例如,如果它使用太多内存则自动杀死进程。 有没有任何现
我想在一定的时间后自动杀死命令。我想到一个这样的界面:
% 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和其他操作的粗略的内部超时机制。然而,在我的经验,这种技术适用于绝大多数你想限时的过程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读