Как безопасно принудительно отключить Mac - PullRequest
6 голосов
/ 15 ноября 2009

Что я хочу

Я разрабатываю небольшое приложение, чтобы заставить меня работать только в определенное время дня - мне нужно что-то, чтобы заставить меня перестать работать по вечерам, чтобы я мог быть более эффективным в течение дня.

Возможность в OS X отключить мою машину в определенное время слишком легко отменить. И вы всегда можете снова войти в систему.

Я хочу, чтобы мое приложение закрывало все приложения, независимо от того, работают они или нет.

Что я пробовал

Я думал об убийстве процесса loginwindow, но я читал, что это может привести к повреждению данных.

Я столкнулся с командой shutdown - я использую sudo shutdown -h +0 для немедленного выключения. Похоже, это всего лишь билет, но я беспокоюсь, что это может привести к повреждению данных, если, скажем, Дисковая утилита выполняет какое-то сканирование.

Безопасна ли команда выключения?

Может ли команда выключения вызвать повреждение? Или это безопасно для использования? Есть ли лучший способ безопасного принудительного отключения?

Ответы [ 6 ]

3 голосов
/ 15 ноября 2009

Используйте AppleScript для tell application "System Events" to shut down.

2 голосов
/ 15 ноября 2009

Команда выключения посылает запущенным процессам сигнал о завершении, давая им возможность выполнить очистку, если это необходимо. Поэтому, как правило, когда приложение получает этот сигнал (SIGTERM (inate)), оно должно завершиться и выйти.

IIRC в Snow Leopard (10.6) Apple добавила нечто, называемое быстрым выключением (или аналогичным), которое будет отправлять процессы, которые были помечены как нормально, с сигналом SIGKILL, отключая их без шансов для очистки. Это должно сделать отключение быстрее. По умолчанию приложения все еще получают SIGTERM и должны подписаться на SIGKILL; и они могут пометить себя как "грязные", т.е. е. имея несохраненную работу и не хочет быть убитым насильно.

Таким образом, хотя завершение работы в середине работы дисковой утилиты прервет все, что делает дисковая утилита, ИМХО это не приведет к повреждению данных в целом. Однако, в зависимости от выполняемой в данный момент операции, вы можете получить неполный образ диска или полуформатированный раздел. Может быть, вы захотите воздержаться от его использования, когда узнаете, что приближается конец настроенного рабочего времени.

Использование cron для планирования выключения является жизнеспособным вариантом, если вы хотите, чтобы это произошло в указанное время. Если вы хотите, чтобы это произошло через определенное время после входа в систему, вы можете использовать числовой параметр для отключения, чтобы указать, скажем, 8 часов.

1 голос
/ 16 ноября 2009

рекомендуемый способ регулярного отключения компьютера - в системных настройках -> панель «Экономия энергии». Нажмите на кнопку «расписание» в правом нижнем углу. остальное говорит само за себя ...

1 голос
/ 15 ноября 2009

Принудительное завершение работы компьютера (и отказ от несохраненной работы) для меня не очень хорошая идея. Разве не было бы проще и безопаснее просто установить будильник, чтобы напоминать себе, когда следует прекратить работу, и уходить от компьютера, когда он звонит? (Это то, что я делаю.)

Редактировать: Это могло бы показаться немного грубым, что вовсе не было моим намерением. (Я не собирался высмеивать ваш вопрос или что-то в этом роде.) Я просто думаю, что это было бы лучшим решением этой проблемы:)

1 голос
/ 15 ноября 2009

Если вы хотите потерять несохраненную работу, тогда shutdown -h - ваш единственный ответ.

Однако любой, кто отладил полноэкранное приложение в OS X, знает, что приложению очень просто (некоторые говорят, что слишком просто) захватить экран и сделать компьютер практически бесполезным (без SSHing с другого компьютера, чтобы убить процесс.) Это еще одна альтернатива.

0 голосов
/ 15 ноября 2009

Может быть, на вашем компьютере установлен cron? Это прекрасно =)

...