XINU
|
指定のプロセスを終了させ、システムから終了させたプロセス情報を取り除く。 More...
#include <xinu.h>
Go to the source code of this file.
Functions | |
syscall | kill (pid32 pid) |
指定のプロセスを終了させ、システムから終了させたプロセス情報を取り除く。 More... | |
指定のプロセスを終了させ、システムから終了させたプロセス情報を取り除く。
Definition in file kill.c.
指定のプロセスを終了させ、システムから終了させたプロセス情報を取り除く。
Step1. 割り込み禁止状態に移行する。
Step2. プロセスが以下の状態であれば、割り込み許可状態に復元してから処理を終了する。
・引数のPIDが不正
・引数のPIDがNULLプロセス
・引数のPIDで指定されるプロセスがFREE状態
Step3. 現在アクティブのプロセス数が1以下(NULLプロセスのみ動作中)の場合、
全ユーザプロセスが終了したため、システム終了メッセージを表示する。
Step4. 親プロセスに終了させるプロセスのIDを通知する。
Step5. XINU Shell用に確保したSTDIN(標準入力)/STDOUT(標準出力)/STDERR(標準エラー)用のディスクリプタを閉じる。
Step6. 終了させるプロセスが使用していたスタックメモリを解放する。
Step7. 終了させるプロセスの状態に応じて、以下の処理を行う。
・実行中の場合、FREE状態に移行し、再スケジューリングを行う(二度と戻ってこない)。
・SLEEP状態やタイムアウト/メッセージ到着待ちの場合、休眠キューから終了させるプロセスを取り除く。
・WAIT状態の場合、終了させるプロセス分(1個分)だけセマフォカウンタを増やす。次に、READY状態用の処理を行う。
・READY状態の場合、終了させるプロセスをキューから取り出し、終了させるプロセス状態のをFREE状態に遷移する。
Step8. 割り込み許可状態に復元してから、OKを返す。
[in] | pid | 終了させたいプロセスのID |
Definition at line 31 of file kill.c.
References close(), disable(), freestk, getitem(), isbadpid, NULLPROC, OK, PR_CURR, PR_FREE, PR_READY, PR_RECTIM, PR_SLEEP, PR_WAIT, prcount, procent::prdesc, proctab, procent::prparent, procent::prsem, procent::prstate, procent::prstkbase, procent::prstklen, resched(), restore(), sentry::scount, semtab, send(), SYSERR, unsleep(), and xdone().
Referenced by exit(), userret(), and xsh_kill().