Logout Responsibilities (OS X)

Logout Responsibilities

The procedures for logging out, restarting the system, or shutting down the system are similar. A typical logout/restart/shutdown takes place as follows:

  1. The user selects Log Out, Restart, or Shut Down from the Apple menu.

  2. The foreground application initiates the user request by sending an Apple event tologinwindow. (See“Initiating a Logout, Restart, or Shutdown”(page 17) for a list of events.) For Cocoa applications, this isdone by the Application Kit. 

  3. The loginwindow program displays an alert to the user asking for confirmation of the action.
  4. If the user confirms the action, loginwindow quits every foreground and background user process.
  5. Once all processes have quit, loginwindow ends the user session and performs the logout, restart orshutdown. 

Terminating Processes

As part of a log out, restart, or shutdown sequence,loginwindow attempts to terminate all foreground andbackground user processes.

Your process should support sudden termination for the best user experience. SeeNSProcessInfo Class Referencefor information on how to adopt this technology. If your process supports sudden termination, it is just sentaSIGKILL signal. If you have temporarily disabled sudden termination, the normal process below applies.

For Cocoa applications, termination is partly handled by the Application Kit, which calls theapplicationShouldTerminate:delegate method. To abort the termination sequence, implement thismethod and returnNSTerminateCancel; otherwise, termination of your application continues normally.

Non-Cocoa applications receive a “Quit Application” Apple event (kAEQuitApplication), as a courtesy, togive them a chance to shut down gracefully. The process should terminate itself immediately or post an alertdialog if a user confirmation is required (for example, if there is an unsaved document). As soon as that conditionis resolved, the application should terminate. If the user decides to abort the termination sequence (by clickingCancel in a Save dialog, for example) the application should respond to the event by returning auserCanceledErrerror (-128).

If a foreground application fails to reply or terminate itself after 45 seconds,loginwindow automatically abortsthe termination sequence. This safeguard is to protect data in various situations, such as when an applicationis saving a large file to disk and is unable to terminate in the allotted time. If a foreground application isunresponsive and not doing anything, the user must use the Force Quit window to quit it before proceeding.

For background processes, the procedure is a little different. Theloginwindow program notifies the processthat it is about to be terminated by sending it a Quit Application Apple event (kAEQuitApplication). Unlikeforeground processes, however, loginwindowdoes not wait for a reply. It proceeds to terminate any openbackground processes by sending aSIGKILL signal, regardless of any returned errors.

If the system is being shut down or restarted, it sends aSIGTERM signal to all daemons, followed a few secondslater bySIGKILL signal. 


Initiating a Logout, Restart, or Shutdown

To initiate a logout, restart, or shutdown sequence programmatically, the foreground application must sendthe appropriate Apple event to loginwindow. Upon receipt of the event, loginwindow begins the processof shutting down the user session.

The following list shows the preferred Apple events for logout, restart, and shutdown procedures. These eventshave no required parameters.

   kAELogOut
   kAEShowRestartDialog
   kAEShowShutdownDialog

In addition to the preferred Apple events, there are two additional events that tell loginwindow to proceedimmediately with a restart or shutdown sequence:


Warning: Ifyousendoneoftheseeventstologinwindow,theuserdoesnothaveanopportunityto cancel the action, and unsaved data can be lost. These events should be used very seldom, if at all.


kAERestart
kAEShutDown

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值