2011-03-26 163 views
0

我想在終端中編寫一個腳本,使您無法打開特定的應用程序。外殼腳本,以防止執行特定的應用程序

這裏的腳本:

#!/bin/bash 

while [ true ]; do 

killall iChat 

done 

當我運行該腳本,我得到一個消息,說:「屬於你沒有匹配的過程中發現」。這是什麼意思,我該如何解決?

另外我想在bash中運行這個腳本,這樣當我killall Terminal它會繼續運行。目前當我killall Terminal,整個腳本停止工作。

這怎麼辦?

+0

括號是不必要的:'while true;做'工作得很好。 – 2011-03-26 12:44:05

回答

1

該進程不會被命名爲iChat,而是類似於/Applications/iChat.app/Contents/MacOS/ichat。使用正則表達式與killall殺死與包含給定的字符串名稱的過程:「真時」

killall -m的iChat

現在,用的這個循環會很快運行,掛鉤你的CPU而不做任何事情。也許你想睡一會兒,至少?

最後,要運行該循環以殺死終端而不會終止腳本運行的終端,請不要在終端中運行它 - 在後臺運行它。把它放在一個文件中,這樣說

殺手&

+0

好酷,現在我該如何在後臺運行代碼?最新的代碼是什麼?我在那裏有一個無限循環,所以每次這個人試圖打開應用程序時,它就會在每次嘗試時終止 – 2011-03-27 19:24:55

+0

老實說,就解決所述問題而言,我認爲Slartibartfast的答案更好。但是,如果您出於某種原因需要這樣做:在後臺運行命令只是使用「&」字符跟蹤它的問題。所以在上面的回答中,最後一個例子中的「&」在後臺運行腳本「殺手」。 – 2011-03-27 19:26:54

4

這不是以防止啓動過程的方式。你需要做的是chown root.root /path/to/iChat所以這個過程歸root,然後chmod a-x /path/to/iChat。這將阻止進程可執行,並且權限只能由root進行更改。

1

目前尚不清楚您爲什麼需要這樣做,也不知道您的違規者是如何確定的。

如果您正在處理非復​​雜的違規者,類似於SiegeX的方法(chmod 500/chmod a-x)將阻止應用程序從頭開始。

如果你必須在事後殺人,killall可以工作,但它是一種觸摸風險(你冒着殺死你不打算殺死的進程的風險)。

雖然從根本上說,用戶通常可以下載源代碼(或者自己的二進制代碼),然後編譯並運行該軟件。這項任務非常艱鉅。