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

Linux,在子进程上超时

发布时间:2020-12-13 23:50:10 所属栏目:Linux 来源:网络整理
导读:好吧,我需要编写一个调用脚本的代码,如果脚本中的操作挂起,则终止该过程. 首选语言是Python,但我也在查看C和bash脚本文档. 似乎是一个简单的问题,但我无法决定最佳解决方案. 从目前为止的研究: Python:虚拟机使用的是一些奇怪的线程模型 一次一个线程,不会
好吧,我需要编写一个调用脚本的代码,如果脚本中的操作挂起,则终止该过程.

首选语言是Python,但我也在查看C和bash脚本文档.

似乎是一个简单的问题,但我无法决定最佳解决方案.

从目前为止的研究:

> Python:虚拟机使用的是一些奇怪的线程模型
一次一个线程,不会工作?
> C:到目前为止,首选的解决方案似乎是使用SIGALARM fork
EXECL.但SIGALARM不是堆安全的,所以它可以废弃一切?
> Bash:超时计划?所有发行版都不标准?

由于我是Linux的新手,我可能没有意识到有这些功能的500种不同的问题,所以有谁能告诉我最安全和最干净的方法是什么?

解决方法

在bash中你可以做类似的事情:

>在后台启动脚本/程序&
>获取后台进程的进程ID
>睡一段时间
>然后杀死进程(如果它已经完成你不能杀死它)或者你可以检查进程是否仍然存在然后杀死它.

例:

sh long_time_script.sh &
pid=$!
sleep 30s
kill $pid

你甚至可以尝试使用陷阱’script_stopped $pid’SIGCHLD – 请参阅bash man获取更多信息.

更新:我发现了其他命令timeout.它完全符合您的需要 – 运行带有时间限制的命令.例:

timeout 10s sleep 15s

将在10秒后杀死睡眠.

(编辑:李大同)

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

    推荐文章
      热点阅读