我正在寻找一个可以终止 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 发送loginwindow
ApplekAEShutDown
事件:
killall process1 process2
osascript -e 'tell app "System Events" to shut down'
如果您想在不要求保存未保存的更改等的情况下关闭,请尝试使用sudo shutdown -h now
。它会向所有进程发送一个TERM
信号,然后发送一个KILL
信号,这应该是相对安全的,即使是图形应用程序也是如此。如果应用程序支持突然终止,则向其发送信号应该是安全的KILL
。
通常,当您关闭时,Cocoa 应用程序会通过调用applicationShouldTerminate:
委托方法终止,非 Cocoa 应用程序和后台进程会收到kAEQuitApplication
Apple 事件,守护进程会收到一个TERM
信号,然后是另一个KILL
信号。请参阅守护进程和服务编程指南。
编辑:如果您想禁用重新启动后重新打开应用程序,您可以defaults -currentHost write com.apple.loginwindow TALAppsToRelaunchAtLogin -array '()'
在 之前运行sudo shutdown -r now
。登录时要重新打开的应用程序列表存储在 中~/Library/Preferences/ByHost/com.apple.loginwindow.*.plist
。