如何使用脚本终止 OS X 中的所有进程

如何使用脚本终止 OS X 中的所有进程

我正在寻找一个可以终止 Mac 上所有进程的脚本。更具体地说,该脚本应该终止所有进程并关闭。


嗯,重点是我想杀死所有进程,然后重新启动 Mac OS X但无法将其关闭。我知道有类似的命令,sudo shutdown -r now但它在我的 Mac 上不起作用(该命令会重新启动它,但不会终止重新启动后的进程)。

我无法使用,sudo shutdown - h now因为我无法访问我的 Mac(只能使用 TeamViewer 连接到我的 Mac Mini)。所以我无法按下开/关/重启按钮。

有什么想法可以做到吗?

答案1

正如 Daniel J. 指出的那样,为什么你不能使用

   sudo shutdown -h now

这将终止计算机上的所有进程并关闭计算机。为什么必须“重写”命令已经完成的脚本shutdown

答案2

嗯,您需要一个 bash 脚本,该脚本获取所有正在运行的进程及其 PID 的列表,然后使用循环杀死每个 PID,就像在kill 1002循环内部一样,完成后,您可以调用关机进程。事实上,关机进程已经为您完成了这一任务。

答案3

如果您只想终止几个特定进程,则可以使用killall然后使用 AppleScript 发送loginwindowApplekAEShutDown事件:

killall process1 process2
osascript -e 'tell app "System Events" to shut down'

如果您想在不要求保存未保存的更改等的情况下关闭,请尝试使用sudo shutdown -h now。它会向所有进程发送一个TERM信号,然后发送一个KILL信号,这应该是相对安全的,即使是图形应用程序也是如此。如果应用程序支持突然终止,则向其发送信号应该是安全的KILL

通常,当您关闭时,Cocoa 应用程序会通过调用applicationShouldTerminate:委托方法终止,非 Cocoa 应用程序和后台进程会收到kAEQuitApplicationApple 事件,守护进程会收到一个TERM信号,然后是另一个KILL信号。请参阅守护进程和服务编程指南

编辑:如果您想禁用重新启动后重新打开应用程序,您可以defaults -currentHost write com.apple.loginwindow TALAppsToRelaunchAtLogin -array '()'在 之前运行sudo shutdown -r now。登录时要重新打开的应用程序列表存储在 中~/Library/Preferences/ByHost/com.apple.loginwindow.*.plist

相关内容