다른 사용자 프로세스 종료

다른 사용자 프로세스 종료

일부 사용자 환경에서는 특정 성능 테스트 중에 로그인하고 해당 환경에서 실행 중인 모든 프로세스를 종료해야 합니다.

환경 이름은 rswrk01,...to 와 같습니다 rswrk98. 이것이 우리가 로그인하는 방법입니다.

sudo su - rswrk96

비밀번호를 묻는 메시지가 표시되지 않고 직접 로그인됩니다.

수동으로 로그인하여 프로세스를 종료하는 대신 모든 환경에서 실행 중인 모든 프로세스를 종료하는 스크립트를 자동으로 작성할 수 있습니까?

그런데 저는 루트가 아닙니다.

$ uname -a
HP-UX rcihp145 B.11.23 U 9000/800 3683851961 unlimited-user license

답변1

sudo -u rswrk96 -i killall ...su - rswrk96이는 다음과 동일해야 합니다 killall ....

이제 남은 것은 시퀀스 00-96을 생성하는 것뿐입니다. 이것은 작동합니다:

for i in $(seq -w 00 96); do sudo -u rswrk$i -i killall ...; done

지금 생각해보면 넌 할 수 있을 것 같아

for i in $(seq -w 00 96); do sudo killall -u rswrk$i; done

로그인이 필요하지 않습니다.

답변2

so rswrk01와 co는 사용자입니다. 가끔 유용하다kill즉, PID로 -1을 전달하면 신호 전송자가 신호 전송 권한을 가진 모든 프로세스에 신호가 전송됩니다. 즉, 루트가 아닌 사용자의 경우 kill -$sig -1해당 사용자로 실행 중인 모든 프로세스에 신호가 전송됩니다. 여기에는 킬러가 포함되지만 전달은 원자적이므로 모든 관련 프로세스가 신호를 수신합니다.

이제 당신이 해야 할 일은 그것을 루프에 넣는 것뿐입니다. 그러면 작업이 완료됩니다. 앞에 0을 사용하여 숫자 형식을 지정하는 것은 다소 번거롭기 때문에 덜 예쁘지만 편리한 방법은 앞에 0을 넣고 1(즉, 1에서 98 대신 101에서 198까지) 이를 제거하는 것입니다.

i=101
while [ $i -le 98 ]; do
  sudo su - rswrk${i#1} kill -KILL -1
  i=$((i+1))
done

또는 ksh로 표현됩니다.

for ((i=101; i<=198; i++)); do
  sudo su - rswrk${i#1} kill -KILL -1
done

또는 bash나 zsh에서:

for i in {01..98}; do
  sudo su - rswrk$i kill -KILL -1
done

답변3

kill -9 -1명령을 실행하는 사용자를 대신하여 실행 중인 모든 프로세스, 심지어 쉘까지 실행 취소합니다. sudo를 사용하여 다른 사용자의 프로세스를 종료할 수 있습니다. sudo -u user1 kill -9 -1

아니면 단순히 -u플래그를 사용하여 pkill명령을 내리세요.

관련 정보