我有一台机器,我不希望发现者运行,所以最初我使它无法执行:
sudo chmod -R ax /System/Library/CoreServices/Finder.app
但是后来意识到launchd仍然在试图每秒多次发现finder,导致巨大的日志文件包含数百万行:
com.apple.launchd.peruser.502[109] (com.apple.Finder[93799]) <Error>: posix_spawn("/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder", ...): Permission denied com.apple.launchd.peruser.502[109] (com.apple.Finder[93799]) <Warning>: Exited with exit code: 1
所以我编辑/System/Library/LaunchAgents/com.apple.Finder.plist
这样它就不会启动了。 我现在的问题是迫使launchd重新加载plist,因此停止尝试发现finder。 但是,我无法重新启动机器。
我已经尝试使用launchctl来删除和卸载进程,但似乎不工作:
$ sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.Finder.plist launchctl: Error unloading: com.apple.Finder $ sudo launchctl remove com.apple.Finder launchctl remove error: No such process
无论如何,我可以停止启动不断尝试加载取景器,而无需重新启动机器?
Finder是一个LaunchAgent,而不是一个LaunchDaemon,这意味着它被加载为login会话的一部分。 要么使用launchctl unload
而不使用sudo
,要么退出并重新login。
您的日志显示Finder正在为用户502运行,但是您正在使用sudo
运行launchctl
,并且root没有运行Finder。 尝试launchctl unload
没有sudo
。
正如Gordon所说,您需要在用户的相同mach引导程序环境中执行您的launchctl unload ...
命令。 launchctl本身有一个工具可以通过bsexec来做到这一点,你只需要提供一个在该用户上下文中运行的任何进程的PID,Finder就不会运行,所以select一个不同的进程。 用户相关的根进程是loginwindow console
,所以这是最有意义的:
USERNAME=yourusername;export USERNAME; sudo launchctl bsexec "$(ps auxww | grep loginwindow\ console | grep "$USERNAME" | grep -v grep | awk '{print $2}')" sudo -u "$USERNAME" launchctl unload -wF /System/Library/LaunchAgents/com.apple.Finder.plist
用你正在影响的用户名replaceyourusername
,瞧。
系统
Mac OS X,版本:10.6.8(Snow Leopard)
任务
我想禁止,主要是最初的自动启动,但也可以自动重新启动Finder(作为一个“简单的”解密encryption磁盘的解决scheme)之前Finder会尝试(和失败)加载(并在该过程丢弃)旧的(preferences'd)列表的以前打开的位置..
可靠性
我很less重新启动我的电脑(并没有太多与Finder崩溃),所以
我很多次都没有看到这个configuration的效果(感觉更像是一个黑客)。
我现在也看到,我还没有支持我原来的,所以我不能看到我做了什么改变。
程序
无论如何,通过在Finder的launchctl
(1)/ launchd
(8)属性列表launchctl
<key>KeepAlive</key>
设置为<false/>
,似乎删除了重新启动
但是,设置<key>RunAtLoad</key>
(再次, <false/>
)似乎没有效果(在Finder上,因为它可能启动〜硬编码)。
在一个侧面说明,我可以说创build一个LaunchAgent – for /与任何其他常规应用程序 – 与<key>RunAtLoad</key>
设置为<true/>
如果你像我一样,有一个应用程序(共享 -服务)经常崩溃。
参考
launchd.plist
(5)手册页 还有一点实用
如果我可以为这些LaunchAgents
/ LaunchDaemons
推荐一个graphics应用程序来configuration我想推广的任务(没有任何从属关系,除了发展中国籍) Lingon (注意不同的(Snow)Leopard和Lion版本)。
最后
对于这个相当微不足道的问题,很抱歉。
希望在10.7 Lion版本中,大部分情况也是如此。 虽然Finder的行为可能会更好(不知何故,build议不要总是丢弃不可实现的位置),符合“恢复”狮子function以及“自动保存”。
现在我只是还有一个小的mac(文件大小)在unix.stackexchange注释)。
一些评论中给出的错误信息:
Bug: launchctl.c:2325 (23930):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
显示launchctl
正试图打开文件并失败。 这可能是由于权限,但这似乎不太可能,因为使用sudo -u
。 与O_EXLOCK
标志相关的O_EXLOCK
。 在开始工作时可能会launchd
locking数据库,可能是检查作业是否被禁用,并且会频繁地重试作业,以致大部分时间数据库文件被locking。
运行一个不断尝试卸载作业的循环应该在launchd
没有locking文件时最终进入:
for ((i = 0; i < 100; i++)) do echo -n "$i " launchctl unload ... && break done
我知道从ssh
卸载工作通常是可行的,因为我已经做了很多次了,所以我认为这个问题一定是由于失败/重载周期的频率所致。
我得到了你想要做的,但你完全错误地做了这件事。
使用家长控制设置受限制的帐户。 将其设置为使用简单查找器 。