วิธีออกจากระบบผู้ใช้จากบรรทัดคำสั่งใน OS X 10.9


31

ฉันต้องการออกจากระบบปฏิบัติการ Mac OS X จากบรรทัดคำสั่ง เวอร์ชั่น OS X ของฉันคือ 10.9 ฉันลองใช้คำสั่งpkill -KILL -u uidแต่คำสั่งนี้ไม่ได้ผล มีคำสั่งที่สามารถใช้เพื่อล็อกเอาต์ผู้ใช้จากระบบโดยใช้บรรทัดคำสั่งเท่านั้นไม่ใช่AppleScriptหรือไม่?


อะไรไม่ได้ผล?
nohillside

ในการรันคำสั่ง pkill -KILL -u uid ระบบแสดงหน้าจอสีเทาและรอเป็นเวลานานระบบจะแสดงหน้าต่างบังคับให้ออกโดยไม่มีแอปพลิเคชันทำงานอยู่
prateeak ojha

คำตอบ:


32

sudo launchctl bootout gui/$(id -u <username>)
หรือ
sudo launchctl bootout user/$(id -u <username>)

แทนที่ชื่อผู้ใช้ด้วยชื่อผู้ใช้ของผู้ใช้เป้าหมายหรือแทนที่ทั้ง subshell ด้วย uid ของผู้ใช้ สิ่งนี้บอกให้ Launchctl ฉีกเซสชั่นการล็อกอินของผู้ใช้ (gui หมายถึงเซสชั่นการล็อกอินชั่วคราวของผู้ใช้ผู้ใช้ระบุกระบวนการพื้นหลังของผู้ใช้)

คุณสามารถออกจากระบบได้โดยไม่ต้องsudoทดสอบ

โปรดทราบว่านี่จะทำงานได้กับ macOS 10.11.x หรือใหม่กว่าเท่านั้น (ดูlaunchctl helpเพิ่มเติม)


1
ฉันเพิ่งอ่านคำถามของคุณอีกครั้งและขอโทษที่สิ่งนี้จะไม่ช่วยคุณ แต่จะเกิดขึ้นในผลการค้นหาของ Google
Iain Henderson

29

หากต้องการออกจากระบบหมดจดจากเทอร์มินัล (หรือเซสชัน ssh จากระยะไกล) เพียงแค่ฆ่ากระบวนการ loginwindow:

sudo pkill loginwindow

คุณสามารถจินตนาการและระบุผู้ใช้หากผู้ใช้หลายคนมีกระบวนการเข้าสู่ระบบการเรียกใช้งาน แต่นี่เป็นวิธีที่ง่ายเพียงวิธีเดียวไม่มีวิธีที่รวดเร็วในการสิ้นสุดเซสชันกราฟิกของผู้ใช้


16

สิ่งนี้ได้ผลสำหรับฉันในอดีต:

ออกจากระบบ (พร้อมการยืนยัน)

osascript -e 'tell app "System Events" to log out'

ออกจากระบบโดยตรง (ไม่มีการยืนยัน)

osascript -e 'tell app "System Events" to  «event aevtrlgo»'

หรือ

osascript -e 'tell application "loginwindow" to  «event aevtrlgo»'

วิธีนี้แอปพลิเคชันใด ๆ ที่ทำงานอยู่จะถูกสังเกตเห็นและสามารถยุติได้อย่างปลอดภัย


osascript -e 'บอกแอป "เหตุการณ์ของระบบ" เป็น« event aevtrlgo »' แสดงข้อผิดพลาด: a "<" ไม่สามารถไปได้
prateeak ojha

อืมทำงานได้ดีสำหรับฉัน คุณลองจากเชลล์สคริปต์แทนบรรทัดคำสั่งได้ไหมเชลล์อาจทำสิ่งแปลก ๆ ที่นี่
nohillside

ฉันเดาว่า OP มีปัญหาอื่น ๆ และคำสั่งปกติก็หยุดลงจากความคิดเห็นที่นี่และคำอธิบายคำถาม
bmike

5
โปรดทราบว่า«≠ <<
mlainz

2

หากคุณมีผู้ใช้หลายคน ....

ค้นหา ID กระบวนการด้วย:

ps aux|grep login

จากนั้นจึงฆ่ากระบวนการนั้นและคุณออกจากเซสชันนั้น แต่มีจำนวนมากที่เหลืออยู่ procceses

ตรวจสอบกับpstreeคุณเพื่อให้ทราบว่ากระบวนการใดที่จะยุติ


2

นี่เป็นกลอุบายของฉัน

sudo -s

หากต้องการรับสิทธิ์ใช้งานรูทและพรอมต์ # จากนั้นจึงฆ่ากระบวนการ

killall -vu username -HUP

และถ้ามันไม่ได้หายไปทั้งหมด Nuke em! คำเตือนภาระหน้าที่ - การฆ่าสิ่งต่าง ๆ ในฐานะที่เป็น root ไม่มีการเลิกทำและไม่ใช่ "คุณแน่ใจหรือไม่ว่าคุณต้องการขัดจังหวะกระบวนการนี้โดยไม่บันทึกไฟล์ของคุณรวมถึงฐานข้อมูลที่สำคัญของระบบที่อาจทำให้เครื่อง คำเตือนประเภท

killall -vu username -9

1
ไม่จำเป็นต้องเจาะรูทรู - เพียงแค่ติด sudo ต่อหน้าคำสั่ง killall
user151019

1

ยูทิลิตี้ที่ดีในการเพิ่มเทอร์มินัลของคุณคือคำสั่ง "ออกจากระบบ" ที่จะใช้เช่น:

logout UserName

นี่คือวิธีการ:

  1. แก้ไข. bash_profile ของคุณ

    nano ~/.bash_profile

  2. เพิ่มบรรทัดนี้:

    logout() {sudo launchctl bootout user/$(id -u "$1")}

  3. บันทึกไฟล์กด ctrl+x

  4. รีสตาร์ทเครื่อง

คุณพร้อมที่จะไป;)


ฉันต้องแยกร่างออกเป็นบรรทัดใหม่และใส่วงเล็บปีกกาปิดในภายหลังเช่นกัน
bmauter

@ bmauter ไม่ใช่สำหรับฉันในรูปแบบที่แนะนำทำงานได้อย่างสมบูรณ์แบบ
Kappe

-3

หากคุณเข้าสู่ระบบด้วย ssh ไปยังคอมพิวเตอร์ระยะไกลคุณสามารถออกจากระบบโดยเพียงพิมพ์ 'exit':

[host:~user]$ exit
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.