2011-03-26 118 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可以工作,但它是一种触摸风险(你冒着杀死你不打算杀死的进程的风险)。

虽然从根本上说,用户通常可以下载源代码(或者自己的二进制代码),然后编译并运行该软件。这项任务非常艰巨。