특정 체인과 일치하는 모든 프로세스를 종료하고 싶습니다. 꽤 잘 작동하는 스크립트는 다음과 같습니다.
echo `ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print $2 }'` | xargs kill
이제 `su -c:를 통해 다른 사용자로부터 이 스크립트를 실행하고 싶습니다.
echo password | su -c "echo `ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print $2 }'` | xargs kill" userName;
내 문제는 grep verySpecificChain
여러 프로세스와 일치할 때 첫 번째 요소만 다음으로 전달된다는 것입니다 xargs kill
.
30598 ==> killed
bash: line 1: 30599: command not found ==> Not killed
bash: line 2: 30600: command not found ==> Not killed
bash: line 3: 30606: command not found ==> Not killed
su -c
명령 동작이 변경 되거나 변경되지 않은 이유를 정말로 알고 싶습니다 .
저는 Fedora 20에서 GNU bash 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu)를 실행하고 있습니다.
답변1
단지pkill -f verySpecificChain
답변2
귀하의 예에서 정확히 무엇이 실패했는지 설명할 수 없습니다(그래서 나는 그것이 내 편에서 일종의 부두 프로그래밍이라는 것을 인정합니다), 그러나 이것은 (거의 -- 아래 참조*) 내 bash(Debian)에서 작동하는 수정 사항입니다.
- 내부를 제거하십시오
echo
; - 탈출하다
$2
.
결과:
echo password | su -c "ps aux | grep verySpecificChain | grep -v grep | /usr/bin/awk '{ print \$2 }' | xargs kill" userName;
su
*데비안 에서는 파이프를 사용하여 암호를 에코하는 것을 허용하지 않기 때문에 "거의 작동함"이라고 썼습니다 . 이니셜 없이 실행 echo
하고 대화형으로 비밀번호를 입력해야 합니다. OP의 Fedora에서는 문제가 아닌 것 같습니다.