특정 체인과 일치하는 모든 프로세스를 종료하고 싶습니다. 훌륭하게 작동하는 스크립트는 다음과 같습니다.
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, 버전 4.2.53(1)-릴리스(x86_64-redhat-linux-gnu)에서 GNU bash를 실행하고 있습니다.
답변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에서는 이것이 문제가 아닌 것 같습니다.