삭제하기 전에 사용자 프로세스를 확인하고 종료하십시오.

삭제하기 전에 사용자 프로세스를 확인하고 종료하십시오.

텍스트 파일에서 사용자를 삭제하는 스크립트를 작성 중입니다. 하지만 삭제하기 전에 사용자에게 실행 중인 프로세스가 있는지 확인하고, 그렇다면 모든 프로세스를 종료하고 삭제하고 싶습니다. 이것이 내가 하는 방법이다:

    if 
   #user doesn't exists then print user not exist
else
pids = `ps U "$name" -o pid | head -n -1` 
    if [ -n "$pids" ]
    then
    for pid in $pids
    do
        sudo kill -KILL $pid
    done
fi


     sudo userdel

 $name -r -f    
    echo     


       echo "The user - $name - has been deleted!"
    echo
    fi
    done < "$fname"                         # double-quote fname
    echo

따라서 기본적으로 이는 사용자에게 실행 중인 프로세스가 없는지 확인하는 if 문을 사용하여 사용자를 삭제하는 루프이며, 실행 중인 프로세스가 있으면 강제로 프로세스를 닫고 사용자를 삭제합니다.

하지만 작동하지 않습니다 pids: command not found. .. 해결책이 있습니까? 어떻게 해결합니까?

답변1

다음 코드가 있습니다.

pids = `ps U "$name" -o pid | head -n -1`

bash는 여기서 공백에 대해 까다롭습니다. 공백을 제거하면 pids = ...예상대로 작동합니다.

pids=`ps U "$name" -o pid | head -n -1`

답변2

문제:

=1) 쉘 스크립트 변수 할당 주위에는 공백이 있을 수 없습니다. pids = ...해야 한다 pids=....
2) kill여러 PID를 사용할 수 있습니다. for pid in $pids ...루프가 필요하지 않습니다 . (다음 항목과 관련은 없지만)
3) 다음을 수행하면 코드가 크게 단순화될 수 있습니다.

pkill -KILL -U "$name"

사용자에게 실행 중인 프로세스가 있는지 확인할 필요가 없습니다. 그렇지 않은 경우 명령은 아무 작업도 수행하지 않습니다.

관련 정보