質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

タイムアウト

タイムアウトはイベント発生から完了までに掛かる経過時間に対する一定の待ち時間を指します。また、特定の時間が経過された場合に発生するイベントを指すこともあります。

Q&A

解決済

1回答

5488閲覧

タイムアウト処理

退会済みユーザー

退会済みユーザー

総合スコア0

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

タイムアウト

タイムアウトはイベント発生から完了までに掛かる経過時間に対する一定の待ち時間を指します。また、特定の時間が経過された場合に発生するイベントを指すこともあります。

0グッド

0クリップ

投稿2016/02/15 19:30

シグナル処理で複数のタイムアウトをシングルプロセスで管理したいのです。実装環境はlinuxです。
ここで問題なのですが、シングルプロセスシングルスレッドの状態で複数のalarm(30)を起動した場合アラーム削除処理はどうなるのでしょうか?
例えば

c

1alarm(30); 2alarm(40); 3alarm(50);

のように三つ起動したとして、二つ目のアラームを止めたい時にはどのように記述すればいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2016/02/15 21:27

提示されたコード(断片?)では、1回目のシグナル発生でプロセスが終了してしまうのでは?シグナル受信はどうなっていますか?
guest

回答1

0

ベストアンサー

実際に使用してみたことはないのですが・・・

シングルプロセスの場合、そもそも toma_kazusaさんが意図されているような「複数のalarmを起動」ということは出来ないのではありませんか?

下記の説明が分かりやすいと思いますが
Linux シグナル入門

Linux を含む Unix 類はプロセスごとに一つずつセルフタイマーのようなものを持つことができる。

つまり、タイマーは1個しか無いので、alarm関数を呼び出す度にタイマーが再設定されるだけ(最後の設定が有効になる)だと思います。

引数 seconds の値はタイマーが切れるまでの秒数または 0 である。 0 のときはタイマーをセットしない。 戻り値は,呼び出し前にタイマーがセットされていたならばその残り秒数,セットされていなかったならば 0 である。 呼び出し前にセットされていたタイマーはキャンセルされる。

と説明されている通りです。

ちなみに、タイマーが切れてシグナル SIGALRM が発生した時のデフォルト動作はプロセスの終了ですが、シェルスクリプトならば trap コマンド、C言語ならばシグナル処理関数を適宜設定する事で、任意の動作をさせることが出来ます。

【参考】シグナル処理関数(シグナルハンドラ)を登録する

それで、例えば30秒、40秒、50秒の時点で何らかの(短い)処理をしたい場合は、SIGALRM の発生回数をカウントしつつ
0. alarm(30) を設定し何らかの処理を実施
0. シグナル処理関数の中で alarm(10) を設定し最初の処理を実施《30秒時点》
0. シグナル処理関数の中で alarm(10) を設定し二つ目の処理を実施《40秒時点》
0. シグナル処理関数の中で alarm(0) でタイマーをリセットして三つ目の処理を実施《50秒時点》
のような実装方法も可能かなと思います。

投稿2016/02/15 23:51

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問