ACC SHELL

Path : /etc/
File Upload :
Current File : //etc/initscript

#
# initscript   Executed by init(8) for every program it
#              wants to spawn like this:
#
#              /bin/sh /etc/initscript <id> <level> <action> <process>
#
# Set ulimits from sysconfig
# (c) garloff@suse.de, 1996, 2003, 2008
# License: Artistic

# Set umask to safe level, and set ulimits
umask 022
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
unset HARGS SARGS SARGS2 RC

# Call with OPTION LIMIT BASE
# if BASE is not set, then LIMIT will be treated as absolute value,
# otherwise as percentage of BASE.
# Return value in RC
calc_limit()
{
  local lim
  unset RC
  if test "$2" = "0" -o -z "$2"; then
    return 1
  else
    if test "$2" = "unlimited" -o "${2:0:1}" = "@" -o -z "$3"; then
      RC="-$1 ${2#@}"
    else
      lim=$((($3+99)/100*$2))
      let lim-=$((lim%4))
      RC="-$1 $lim"
    fi
    #echo "(\"$1\" \"$2\" \"$3\" -> \"$RC\""
    return 0
  fi
}

get_mem()
{
  TOT=0; LOANEDTOT=0
  # Get loaned memory if running CMO
  if test -r /sys/devices/system/cmm/cmm0/loaned_kb; then
    LOANEDTOT=`cat /sys/devices/system/cmm/cmm0/loaned_kb`
  fi
  if test -r /proc/meminfo; then
  # Get memory & swap sizes to evaluate the percentages
    MEMTOT=0; SWPTOT=0
    while read tag num unit; do
      case $tag in
        MemTotal:)
	  MEMTOT=$num
	  ;;
        SwapTotal:)
	  SWPTOT=$num
	  ;;
      esac
    done < /proc/meminfo
    TOT=$(($MEMTOT+$SWPTOT+$LOANEDTOT))
  fi
}

kern_ver()
{
  unset NEW268LOCKLIMIT
  case $(uname -r) in
    2.[0-5].*|2.6.[0-7]|2.6.[0-7][.-]*)
	;;
    *)
	NEW268LOCKLIMIT=1
	;;
  esac
}

if [ "$1" != "si" -a -r /etc/sysconfig/ulimit ]; then
  . /etc/sysconfig/ulimit
  # Max CPU time (not recommended)
  calc_limit "Ht" "$HARDCPULIMIT" && HARGS="$RC"
  calc_limit "St" "$SOFTCPULIMIT" && SARGS="$RC"
  # File descriptors
  calc_limit "Hn" "$HARDFDLIMIT" && HARGS="$HARGS $RC"
  calc_limit "Sn" "$SOFTFDLIMIT" && SARGS="$SARGS $RC"
  # Core files (0 makes sense here!)
  test -z "$HARDCORELIMIT" || HARGS="$HARGS -Hc $HARDCORELIMIT"
  test -z "$SOFTCORELIMIT" || SARGS="$SARGS -Sc $SOFTCORELIMIT"
  # File sizes
  calc_limit "Hf" "$HARDFILESIZELIMIT" && HARGS="$HARGS $RC"
  calc_limit "Sf" "$SOFTFILESIZELIMIT" && SARGS="$SARGS $RC"
  # User processes
  calc_limit "Hu" "$HARDPROCESSLIMIT" && HARGS="$HARGS $RC"
  calc_limit "Su" "$SOFTPROCESSLIMIT" && SARGS="$SARGS $RC"
  # Apply
  test -z "$SARGS"  || ulimit $SARGS
  test -z "$HARGS"  || ulimit $HARGS
  #test -z "$SARGS2" || ulimit $SARGS2
  unset HARGS SARGS RC

  # Memory dependent limits
  get_mem
  if test $TOT != 0; then
    kern_ver

    # SINGLE process limits to prevent a process from killing the machine
    # by making it go OOM

    # Maximum No more than VIRTUALLIMIT % of all virtual memory
    calc_limit "Hv" "$HARDVIRTUALLIMIT" "$TOT" && HARGS="$HARGS $RC"
    calc_limit "Sv" "$SOFTVIRTUALLIMIT" "$TOT" && SARGS="$SARGS $RC"
    # Maximum resident size is $RESIDENTLIMIT % of physical RAM
    calc_limit "Hm" "$HARDRESIDENTLIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
    calc_limit "Sm" "$SOFTRESIDENTLIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
    # Limit locked mem to $LOCKLIMIT % of phys RAM
    calc_limit "Hl" "$HARDLOCKLIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
    if test -z "$NEW268LOCKLIMIT"; then
      calc_limit "Sl" "$SOFTLOCKLIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
    else
      calc_limit "Sl" "$SOFTLOCKLIMIT" "$MEMTOT" && SARGS2="$SARGS2 $RC"
    fi
    # Optional: Limit stack and data segment sizes ($STACKLIMIT, $DATALIMIT)
    calc_limit "Hs" "$HARDSTACKLIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
    calc_limit "Ss" "$SOFTSTACKLIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
    calc_limit "Hd" "$HARDDATALIMIT" "$MEMTOT" && HARGS="$HARGS $RC"
    calc_limit "Sd" "$SOFTDATALIMIT" "$MEMTOT" && SARGS="$SARGS $RC"
    # Apply
    test -z "$SARGS"  || ulimit $SARGS
    test -z "$HARGS"  || ulimit $HARGS
    test -z "$SARGS2" || ulimit $SARGS2
    unset SARGS HARGS SARGS2 RC NEW268LOCKLIMIT
  fi
  unset TOT MEMTOT SWPTOT
fi
# cleanup environment
unset calc_limit get_mem kern_ver

# Execute the program.
eval exec "$4"

ACC SHELL 2018