2011-03-26 8 views
0

터미널에서 특정 응용 프로그램을 열 수 없게하는 스크립트를 작성하려고합니다. 특정 응용 프로그램의 실행을 막기위한 쉘 스크립트

#!/bin/bash 

while [ true ]; do 

killall iChat 

done 

나는 "당신에 속하는 일치하는 프로세스를 찾을 수 없습니다"라는 메시지가 스크립트를 실행

:

여기 스크립트입니다. 이것이 의미하는 바는 무엇이며 어떻게 수정합니까?

또한 나는이 스크립트를 bash에서 실행하여 killall Terminal이 실행될 때까지 계속 실행하고 싶습니다. 현재 내가 killall Terminal 일 때 전체 스크립트가 작동을 멈 춥니 다.

어떻게이 작업을 수행 할 수 있습니까?

+0

대괄호는 불필요합니다. 'true; 할 '잘 작동합니다. –

답변

1

프로세스의 이름은 iChat가 아니라, /Applications/iChat.app/Contents/MacOS/ichat와 같습니다. 특정 문자열이 포함 된 이름을 가진 프로세스를 죽일 killall는 함께 정규 표현식을 사용 : "잠시 사실"이제

killall는 -m iChat을

는 함께 무엇을 이 루프는 CPU를 고정시키고 아무 것도하지 않고 매우 빠르게 실행됩니다. 적어도 잠시 동안 잠자리에 드실 래요?

마지막으로 스크립트가 실행중인 터미널을 죽이지 않고 터미널을 죽 이도록 루프를 실행하려면 터미널에서 실행하지 말고 백그라운드에서 실행하십시오. 파일에 넣어, 그리고이 시작되는 프로세스를 방지하는 방법이 아니다 뭔가 킬러 &

+0

좋습니다. 이제 백그라운드에서 코드를 실행하는 방법은 무엇입니까? 그게 무슨 코드 야? 그 사람이 매번 시도 할 때마다 응용 프로그램을 열려고 할 때마다 무한 루프가 발생합니다. –

+0

정직하게 말하면, 명시된 문제를 해결하는 측면에서 Slartibartfast의 대답이 더 좋을 것이라고 생각합니다. 그러나 어떤 이유로 든이 작업을 수행해야하는 경우 : 백그라운드에서 명령을 실행하는 것은 "&"문자로 명령을 수행하는 것입니다. 그래서 위의 내 대답은, 마지막 예제에서 "&"는 백그라운드에서 "killer"스크립트를 실행한다는 것입니다. –

4

처럼 말한다. 당신이해야 할 일은 chown root.root /path/to/iChat이며, 프로세스는 root이고 그 다음은 chmod a-x /path/to/iChat입니다. 이렇게하면 프로세스가 실행되지 못하게되고 권한은 루트에서만 변경할 수 있습니다.

1

왜 이렇게해야하는지, 위반자를 어떻게 결정했는지 명확하지 않습니다.

정교하지 않은 위반자를 대상으로 작업하는 경우 SiegeX의 접근 방식 (chmod 500/chmod a-x)과 유사한 기능을 사용하면 응용 프로그램이 시작되지 않습니다.

killall을 실행해야한다면 killall이 작동하지만 위험 할 수 있습니다 (죽이지 않을 프로세스를 종료시킬 위험이 있습니다).

사용자는 근본적으로 소스 (또는 자신의 바이너리)를 다운로드하고 그런 식으로 소프트웨어를 컴파일하고 실행할 수 있습니다. 이 작업은 매우 어렵습니다.