星期四, 一月 10, 2008

关机,launchd,StartupItem

关机:
instanelymac上有人说是双核不被正确操作造成的,ovof提供了一个工具onecore来关掉核心,只留下一个。我写了个脚步让它在关机的时候自动运行
编译onecore需要CHUD.framework,xcode中没有,需要另外下载。
gcc -framework CHUD -F/System/Library/PrivateFrameworks onecore.c -o onecore
下载

ps:pcbeta上有朋友说这个仍然不能做到完美关机,还是有关不掉的情况。我还要再试试看。


launchd:
Leopard的daemon管理程序,用于取代传统的rc,不过我看了一些文档后,发现它不能在关机动作中插入一些程序。这就比较麻烦了。

StartupItem:
Leopard中已经不再被推荐使用,都用launchd代替了,不过StartupItem可以用来保持和传统rc的部分兼容。
cat /Library/StartupItems/shutdownfix/StartupParameters.plist
{
Description = "Shutdown Fix";
Provides = ("shutdownfix");
OrderPreference = "None";
}

官方文档上说StartupParameters.plist可以用新的格式也可用旧格式,我用新格式没成功。这个是旧格式。
其中Providers设置就是要执行的脚本。
cat /Library/StartupItems/shutdownfix/shutdownfix
#!/bin/sh

. /etc/rc.common

# The start subroutine
StartService() {
# Insert your start command below. For example:
sleep 5
# End example.
}

# The stop subroutine
StopService() {
# Insert your stop command(s) below. For example:
FN=`date`
touch "/var/tmp/$FN"
/sbin/poweroff_fix
sleep 5
# End example.
}

# The restart subroutine
RestartService() {
# Insert your start command below. For example:
sleep 5
# End example.
}

RunService "$1"


我把要执行的东西写在了StopService里。

没有评论: