「sleep 3600; logout」のようなものを実行したいのですが、logout bashコマンドは現在のターミナルを閉じるだけです。Mac OS Xセッション全体を閉じるにはどうすればよいですか?
「sleep 3600; logout」のようなものを実行したいのですが、logout bashコマンドは現在のターミナルを閉じるだけです。Mac OS Xセッション全体を閉じるにはどうすればよいですか?
回答:
次のApplescriptは、現在のユーザーをログアウトします。
tell application "System Events" to log out
osascript
次のコマンドを使用して、これをbashエイリアスでラップできます。
alias maclogout="osascript -e 'tell application \"System Events\" to log out'"
「>ログアウト[ユーザー名] ...」をクリックするのと同じで、2分間待ってからログアウトします
これは、sleep
次のコマンドと簡単に組み合わせることができます。
alias delayedlogout="sleep 3600; maclogout"
..または単一のエイリアスに結合することができます:
alias delayedlogout="sleep 3600; osascript -e 'tell application \"System Events\" to log out'"
alias maclogout="..."
OS Xのターミナルから現在のユーザーをログアウトする「いい」方法はありません。それを行う「面倒な」方法は、そのユーザーのloginwindow
プロセスを強制終了することです。ユーザー名で実行されているすべてのプロセス(プログラム)を無作法に強制終了します。
これは2段階のプロセスです。
ターミナルで、これを実行します:
ps -Ajc | grep loginwindow
次に、実行します
sudo kill <pid>
<pid>
上記のコマンドの出力からの最初の数字(2列目)はどこですか。
sudo kill -9を使用して、これを機能させるために必要なプロセスを強制的に強制終了します。
たとえば、最初のコマンドへの出力が次の場合:
joshhunt 41 1 41 5e15c08 0 Ss ?? 3:13.09 loginwindow
次にsudo kill 41
、実行してパスワードを入力し、ログアウトします。
これは、bashエイリアスに結合できます。
alias messylogout="ps -Ajc | grep loginwindow | grep -v grep | awk '{print \$2}' | sudo xargs kill"
sudo killall loginwindow
か?少なくとも10.7では、loginwindow
プロセスはすぐに再び開かれるようです。
これは古い質問ですが、助けてくれました。OSX 10.8で必要なコマンドは次のとおりです。
ps -Ajc | grep loginwindow | awk '{print $2}' | sudo xargs kill -9
awk
文は異なり、kill -9
ログインプロンプトが表示されることを保証します。
私は、OS X 10.9以降の「最も素晴らしい」方法は、 launchctl gui/$(id -u <username>) bootout
launchctlのOS X 10.9以降のドキュメントはを実行することlaunchctl help
で見つかりますが、基本的に上記のコマンドはユーザーの一時セッションを分解します。別の方法でlaunchctl user/$(id -u <username>) bootout
は、ユーザーがログインしていないときにユーザーデーモンを実行する永続セッションを切断します。
これはを実行することでテストできます。これによりlaunchctl gui/$(id -u) bootout
、すぐにログアウトされ、システムにログインウィンドウが表示されます(遅延が発生します)。
sudo launchctl bootout gui/XXX
でXXX
は、正しいコマンドは、ユーザーID(UID)の数値です。i)bootout
サブコマンドが最初に来て、ii)$(id)
UIDよりも多くを返すことに注意してください。