【问题标题】:Shell script to prevent execution of a particular application用于阻止执行特定应用程序的 Shell 脚本
【发布时间】:2011-03-26 02:25:21
【问题描述】:

我正在尝试在终端中编写一个脚本,使您无法打开特定的应用程序。

这是脚本:

#!/bin/bash

while [ true ]; do

killall iChat

done

当我运行脚本时,我收到一条消息,上面写着“未找到属于您的匹配进程”。这是什么意思,我该如何解决?

我还想在 bash 中运行这个脚本,这样当我 killall Terminal 时它会继续运行。目前当我killall Terminal时,整个脚本停止工作。

如何做到这一点?

【问题讨论】:

  • 括号是不必要的:'while true; do' 工作得很好。

标签: shell terminal


【解决方案1】:

这不是阻止进程启动的方法。您需要做的是chown root.root /path/to/iChat,因此该进程由root 拥有,然后由chmod a-x /path/to/iChat 拥有。这将阻止进程执行,并且权限只能由root更改。

【讨论】:

    【解决方案2】:

    该进程不会被命名为 iChat,而是类似 /Applications/iChat.app/Contents/MacOS/ichat 之类的名称。使用带有 killall 的正则表达式来终止名称包含给定字符串的进程:

    killall -m iChat

    现在,“虽然是真的”是怎么回事?这个循环将运行得非常快,锁定你的 CPU 而不做任何事情。也许你至少想睡一会儿?

    最后,要运行循环以便它杀死终端而不杀死正在运行脚本的终端,只是不要在终端中运行它——在后台运行它。把它放在一个文件中,然后说类似

    杀手&

    【讨论】:

    • 好吧,现在我该如何在后台运行代码?那是什么代码?我在那里有无限循环,因此每次该人尝试打开应用程序时,它都会在每次尝试时终止
    • 老实说,就解决所述问题而言,我认为 Slartibarfast 的答案更好。但是,如果您出于某种原因需要这样做:在后台运行命令只需在其后面加上“&”字符即可。所以在我上面的回答中,最后一个示例中的“&”在后台运行脚本“杀手”。
    【解决方案3】:

    不清楚你为什么需要这样做,也不清楚你的违规者有多坚决。

    如果您正在处理不成熟的违规者,类似于 SiegeX 的方法(chmod 500 / chmod a-x)将阻止应用程序启动。

    如果您必须在事后执行 killall,killall 可以工作,但它有一点风险(您冒着杀死您不打算杀死的进程的风险)。

    但从根本上说,用户通常可以下载源代码(或他们自己的二进制文件)并以这种方式编译和运行软件。这项任务非常艰巨。

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 2011-01-09
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多