[英]How to timeout complex processes in bash?(process with child-processes of its own)
这里上下文中的过程是“android 构建环境”。 要使正常任务超时,可以这样做
#Timeout command 'do_task' in 10 seconds
timeout 10s do_task
但是,当我尝试使用 android 构建环境时,它似乎不起作用。 这就是发生的事情:
box@boxputer:/media/box/backup/cr81x$ source build/envsetup.sh
box@boxputer:/media/box/backup/cr81x$ lunch aosp_arm-eng
Trying dependencies-only mode on a non-existing device tree?
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=12
TARGET_DEVICE=generic
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-5.13.0-44-generic-x86_64-Zorin-OS-16.1
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=SQ3A.220605.009.A1
OUT_DIR=out
PRODUCT_SOONG_NAMESPACES=device/generic/goldfish device/generic/goldfish-opengl hardware/google/camera hardware/google/camera/devices/EmulatedCamera device/generic/goldfish device/generic/goldfish-opengl
============================================
box@boxputer:/media/box/backup/cr81x$ timeout 10s mka bacon
timeout: failed to run command ‘mka’: No such file or directory
这里,'mka bacon' 是构建命令,'make' 或 'm' 也可以使用,但它们都会导致与上述相同的错误。
我尝试过的还包括
# Spawn a child process:
(dosmth) & pid=$!
# in the background, sleep for 10 secs then kill that process
(sleep 10 && kill -9 $pid) &
( cmdpid=$BASHPID;
(sleep 10; kill $cmdpid) \
& while ! ping -w 1 www.goooooogle.com
do
echo crap;
done )
以及来自此特定 Stackoverflow 线程的其他答案。
我还在相关线程上尝试了另一种解决方案
虽然一个给了我成功,但它引入了自己的问题(下面的代码)
mka bacon &
sleep 10s
但是,这可确保该过程在 10 秒后才终止。 假设我在 5 秒内完成构建。 该过程仍然不会退出。 它不会在 10 秒后退出,当构建产生错误时,这不是一个理想的情况。
当我尝试来自This Particular Stackoverflow thread的其他答案时,该过程在 10 秒后终止,但整个终端出现故障,并且构建仍在运行(在此阶段,即使 Ctrl+C 不起作用)我的猜测是构建环境产生了自己的子进程,具有不同的 PID 用于构建?
如果你想知道 envsetup.sh 是什么,这里是它的粘贴
超时需要一个二进制文件来执行。 根据您的提示
这里,“mka bacon”是构建命令,也可以使用“make”或“m”
我假设 mka 只是一个别名或函数。 您可以了解它是什么以及使用type mka
。 当您找到它时,将其用作超时的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.