方法一:
要让你的计算机能够在每天固定的时间自动开机,必须保证你的主板BIOS支持定时开机。
大多数主板都是开机按Del键进入“CMOS Setup”,将光标移动到“Power Management Setup”(电源管理设置)上,按回车进入其子菜单,有一项“Resume By Alarm”(预设时间启动),如果你的CMOS中没有这个选项说明你的主板不支持这个功能,该选项可以设置系统每天开机时间或者某一固定的日期开机。它有两个选项“Enabled”和“Disabled”,选择“Enabled”后,下面的“Date(of month)”和“Resume Time(hh:mm:ss)”项就可以设置了。“Data(of month)”表示系统开机日期,如果选择0,就表示每天开机;如果选择“1~31”之间的数字,则表示每月固定在某一天开机。“Resume Time(hh:mm:ss)”表示系统开机时间。例如,我们把“Date(of month)”设成“0”,把“Resume Time(hh:mm:ss)”设成“06:00:00”,那么每天早晨6:00的时候,计算机就会自动加电启动了,不过一定要注意接通主机的电源
方法二:
现在大部分网卡都支持网络唤醒,在你的机器接上电源的状态下,
如果有长期不关机的linux服务器的话,可以在服务器的crontab 任务里 定期执行 一个 wake on lan 脚本 ,从而控制你想要定时开机linux机器。
http://rubyforge.org/projects/wakeonlan/ 从这里下载 wake on lan 别的地方也有,
你可以先手动试一下个脚本,我自己用过,
默认情况下,收到信号后,被阻塞的系统调用(read) 会直接返回-1,同时 errno 被置成 EINTR 。这个error对应的错误信息应该类似于 " Interrupted system call"但是很不幸,在linux上,你的代码是看不到这个现象的,因为你使用 signal() 来注册信号处理,它会把 SA_RESTART 打开,这个会导致read系统调用不返回,而是重新开始执行read *** 作 (这些重新执行的动作都是发生在内核,用户代码是看不到的),所以你的代码在alarm信号发生后,仍然会继续read。
如果要看到read被中断的情况,你必须使用 sigaction 这个借口来注册信号处理,
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)
把第二个参数 act 的成员 sa_flags 置零 (确保没有打开 SA_RESTART),你就能看到read被中断的现象了。
建议你阅读一下 Advanced Programming in the Unix Environment 这本书中关于信号相关的内容。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)