【问题标题】:Pause a process before disk is full在磁盘已满之前暂停进程
【发布时间】:2022-02-09 20:45:04
【问题描述】:

某些进程(如git gc --aggressive)需要很长时间才能运行,占用大量磁盘空间,如果磁盘空间用完就会死机。如果磁盘很快就会用完空间,我想暂停它们,所以我有时间释放一些内存。我该怎么做?

【问题讨论】:

    标签: memory linux-disk-free


    【解决方案1】:

    这是我想出的初步解决方案。使用 Mac OS X 测试。欢迎提出建议!

    #!/bin/bash
    
    # Change these variables as necessary.
    FILESYSTEM="/dev/disk1"
    DF=/usr/local/opt/coreutils/libexec/gnubin/df
    OSASCRIPT=/usr/bin/osascript
    
    if ! [[ -x $DF ]]; then echo "Error: $DF isn't executable."; exit 1; fi
    
    PID=$1
    STOPAT=$2
    
    # Verify input
    if [[ -n ${PID//[0-9]/} ]]; then echo "Error: The first parameter should be an integer"; exit 1; fi
    if [[ -n ${STOPAT//[0-9]/} ]]; then echo "Error: The second parameter should be an integer"; exit 1; fi
    
    RED='\033[0;31m'; PURPLE='\033[0;35m'; BLUE='\033[0;36m'
    NC='\033[0m' # No Color
    
    echo -e "Will pause the following process when there are ${PURPLE}$STOPAT${NC} bytes left on ${PURPLE}$FILESYSTEM${NC}"
    
    PROCESS=`ps -p $PID | grep $PID`
    echo -e "${BLUE}$PROCESS${NC}"
    
    # Check every second to see if FILESYSTEM has more than STOPAT bytes left.
    while true; do
        left=`$DF | grep -m 1 $FILESYSTEM | tr -s ' ' | cut -d" " -f4`
        echo -ne "$left bytes left\r";
        if [[ $left -lt $STOPAT ]]; then
            MSG="pausing process...$PID";
            echo $MSG;
            if [[ -x $OSASCRIPT ]]; then
                 $OSASCRIPT -e "display notification \"$MSG\""
            fi
            kill -TSTP $PID
            break
        fi
        sleep 1s
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 2021-04-06
      相关资源
      最近更新 更多