如何安全地试验自己的脚本

时间:2014-02-03 15:34:27

标签: bash fork sandbox

我正在试验一个以递归方式fork和调用自身的bash脚本。终止条件是微妙的,我错了几次,结果是一个无限称自己的脚本。什么是一种安全的方法来沙盒这样的脚本,同时调试它,以便每次出现错误时,我都不必处理停止填充进程表的无限塔?

2 个答案:

答案 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.