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

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

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

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

Q&A

解決済

1回答

2154閲覧

LinuxのTASK_UNINTERRUPTIBLE状態について

curl

総合スコア19

Linux

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

0グッド

1クリップ

投稿2019/01/27 13:06

編集2019/01/28 14:55

お世話になります。

Linuxのプロセス状態について質問があります。

TASK_UNINTERRUPTIBLEは割り込み不可の待ち状態
であることは知っているのですが、
割り込み不可というのはどのような状態なのでしょうか?

ddコマンドを使用してTASK_UNINTERRUPTIBLEの状態を作成した際に
ctrl + c でプロセスを削除できないのが「割り込み不可」状態かと思っていたのですが、
普通にctrl + cでプロセスを削除することができました。

実行したコマンド dd if=/dev/zero of=test bs=1M count=1024

※TASK_UNINTERRUPTIBLEになっていると思ったのは、
psコマンドにてステータスがDになっているためです。

ps aux | grep dd      ubuntu 7503 11.5 0.2 9000 2992 pts/0 D+ 14:50 0:00 dd if=/dev/zero of=test bs=1M count=1024

そこで、割り込み不可というのは、何が割り込むことができない状態なのか
分からなくなり質問させて頂きました。

ご存知の方がいらっしゃいましたらご回答お願いします。

以上、よろしくお願いします

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

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

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

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

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

otn

2019/01/27 14:00

> ddコマンドを使用してTASK_UNINTERRUPTIBLEの状態を作成した際に なぜそれでTASK_UNINTERRUPTIBLEになると思ったのでしょうか?
wwbQzhMkhhgEmhU

2019/01/28 03:31

多分topとかで、status=Dの状態だと思いますよ
curl

2019/01/28 14:56

回答ありがとうございます。 psコマンドでDの状態になっていたのでTASK_UNINTERRUPTIBLEと思いました。
wwbQzhMkhhgEmhU

2019/01/28 15:12

INT/TERMで割り込みが入らない状態なのだと思いますが、この状態見た目ほど長くはない(断続的に切れる)ので、そのタイミングでシグナルが受け取れるんだと思います。推測ですが。ブロック長を長くしたらどうなるのかとかよく分かりませんけど。。。 straceとかで見てみると何か分かるかもしれません。
curl

2019/01/28 16:11

回答ありがとうございます。 straceで確認した結果、bsサイズの書き込みが終了したタイミングでctrl + cが効いてました。 勉強になりました、ありがとうございます。
guest

回答1

0

ベストアンサー

psコマンドでDの状態になっていたのでTASK_UNINTERRUPTIBLEと思いました。

試してみましたが、連続してpsを実行してみると、ほとんど R でたまに D になりますね。
Ctrl-C が効いたときには R だったのでは?そちらでは何度やっても D ですか?

Bash

1while true;do ps uh -C dd;done > pslist & 2dd if=/dev/zero of=test bs=1M count=1024 3 4ddが終わったら、whileループを kill %while 等で止める。

投稿2019/01/28 15:21

編集2019/01/28 15:32
otn

総合スコア86295

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

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

curl

2019/01/28 16:09

回答ありがとうございます。 自分の環境で実施したところ、ほとんどDでたまにRになっていました。 他の回答者が指摘した頂いと通りstraceで挙動を確認したところ、 ddコマンド指定したbsサイズの書き込みが終了したタイミングでctrl + cが効いてました。 そのため、書き込みが完了した時点で割り込みが可能になっていたと思われます。
wwbQzhMkhhgEmhU

2019/01/28 16:18

コメントを書いたときにそれとは違うスクリプトで試しましたが、ほぼDでしたね。 コア数の少ないVM環境で試しましたし、bsは4096で40GB程度の書き込みをさせてました。
curl

2019/01/28 16:31

こちらの環境ではコア数が1つのサーバだと、ほとんどDでしたが 3コアだと環境だと、ほとんどRでした。 bs=1M count=1024 で実施しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問