我正在试验一个以递归方式fork和调用自身的bash脚本。终止条件是微妙的,我错了几次,结果是一个无限称自己的脚本。什么是一种安全的方法来沙盒这样的脚本,同时调试它,以便每次出现错误时,我都不必处理停止填充进程表的无限塔?
答案 0 :(得分:5)
您可以使用ulimit
ulimit -u 20
将限制用户运行的最大进程数
答案 1 :(得分:2)
您可以使用脚本名称简单计算进程数,如果数字太高则终止。
This blog post引入了实现此功能的功能:
count_process(){
return $(ps -ef | grep -v grep | grep -c $1)
}
解释(摘自博客文章):
ps -ef
将返回所有正在运行的进程的列表(详细信息),grep
$1
对于可重用性,作者将该函数作为小脚本提供:
#!/bin/sh
#
# /usr/bin/processCount
# Source: http://samcaldwell.net/index.php/technical-articles/3-how-to-articles/68-how-do-i-count-the-number-of-linux-instances-of-a-given-process-using-a-bash-script
#
[ -z $1 ] && {
echo " "
echo "Missing expected input."
echo " "
echo "USAGE:"
echo " "
echo " $0 <executable file>"
echo " "
echo " NOTE: When executing this script use the path and filename of the"
echo " program. Using only the process name can potentially return inaccurate"
echo " results."
echo " "
exit 1
}
echo $(ps -ef | grep -v grep | grep -v $0 | grep -c $1)
#script ends here.