UNIXでのトレース

[戻る]
harupapa 2007/12/07(金) 10:20:45
ANSI標準のC言語にてCLIのプログラムを作成しました。
これをUNIX系のOSで動作(それぞれのOSでmakeする)させて、UNIXのOSからkillコマン
ド?で停止させられた時、その状況を認識することはできるのでしょうか?

しろーと 2007/12/07(金) 10:48:01
>その状況を認識することはできるのでしょうか?
「誰が」その状況を認識する事を想定しているのでしょうか?

harupapa 2007/12/07(金) 10:52:04
言葉が足らずすみません。
停止させられた側のプログラムです。

maru 2007/12/07(金) 14:11:34
単純な疑問ですが、停止させられたプログラムは停止しているのにどうやって停止させられてる
ことを認識出来るんですか?
それとも「停止要求を受けたことを認識出来るか」ということ?

harupapa 2007/12/07(金) 14:44:50
いろいろ足らずすみません。
>「停止要求を受けたことを認識出来るか」
すみません。その通りです。
あと、認識だけではなくて、ファイルに書き込みも出来ると良いのですが。

MFC等を使用すると、システムからの終了(停止?)イベントを受け取る事が出来たと認
識しているのですが、MFCを使用せずにプログラムを記述した場合に、
「外部から停止処理をされた際に、自分で終了処理したのではなく外部から停止された
と言う記録をファイルに残したい。」
という事が出来ればと考えています。

プログラムはウォーターフォールと言うのでしょうか、始めから終わりまで途中分岐や
ループはありますけれども、最後まできたら終了するようになっています。
あと、期待通りのルートを通ってくれば、プログラムの戻り値として0を返し、その他の
ルートを通ってくれば、別の値を戻り値としています。

tetrapod 2007/12/07(金) 15:01:01
っていうか CLI って何?俺が思っている CLI とは違う代物?
Command Line Interface のことかな?
Common Language Infrastracture のことかな?
前者であるとして

「停止」という文言で何を意図しているのか良くわからないけど
# 停止というからには再開があるわけで
unix で kill を実行したら通常 SIGTERM が送られるわけで、
それは停止と呼ぶよりもむしろ終了要求。これを受け取るためには
sigaction 関数や signal 関数を使えばいい。
受け取ってログを残して終了するも自由
受け取ってログを残して、でも要求を無視して処理を続けるも自由

SIGKILL は無条件で即時抹消なので終了処理も走らないからログを残すことは不可能

harupapa 2007/12/07(金) 17:25:13
[[解決]]
皆様ご回答いただきありがとうございます。
「停止」は「終了」の意味で使用してしまいました。

sigaction 関数を使用すれば、SIGTERM は受け取れると言うことで認識しました。
sigaction 関数をネットで調べてプログラムに組み込んでみます。

ありがとうございました。

とおりすがり 2007/12/08(土) 00:19:15
どこらへんがVC++の質問だったんだろう…

古いスレッドには追加発言できません。