• ベストアンサー

メッセージキュー一括削除の方法

LINUXプログラムの開発で、バグがありプログラムが暴走してしまい、CTRL+Cで強制的に止めた際、使用していたメッセージキューがそのまま残ってしまうことがままあります。 現在はipcsコマンドで残っているキューのIDを確認してから、ipcrmコマンドでいちいちIDを入力して消しております。 一括して簡単にキューを削除できる良い方法が他にあるのでしょうか。 ご存知の方教えて頂けないでしょうか。 よろしくお願いします。

  • baffo
  • お礼率90% (10/11)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

そういうシェルスクリプトを自作したことがあります。ipcsで一覧表示した結果をパイプでawkにつないでIDの一覧に変換し、一つずつipcrmするスクリプトです。そんなに難しくないので自作してみては?

baffo
質問者

お礼

慣れてないので最初苦労しましたが、何とか作成できました。 ありがとうございました。

関連するQ&A

  • プロセス間でのメッセージキュー送信

    Linux初心者です。 あるプロセスが生成したメッセージキューへ、別のプロセスからメッセージキュー送信する場合、キューIDを指定する必要があります。 しかし、Linuxでは仮想メモリを使用しているため、共有メモリにアクセスできないはずで、異なるプロセス間でキューIDを共有する方法がわかりません。。 メッセージキューについて以下のサイトでサンプルプログラムが紹介されていますが、2つのプロセスが親子関係であるため、キューIDを共有できています。 http://linuxmag.sourceforge.jp/Japanese/March2003/article287.shtml そもそも、親子関係がないとプロセス間通信ができないのでしょうか? ご存知の方、よろしくお願いします。

  • linuxにてプロセス間通信をメッセージキューに行いたいのですが、

    linuxにてプロセス間通信をメッセージキューに行いたいのですが、 ある条件のときにキューに溜まったメッセージを削除したい場合はどのようにしたらいいでしょうか?

  • サーバー内へ溜まった、キューの削除の方法について

    表題の件ですが、現在レンタルサーバーを借りていて、サイトを運営しているのですが、脆弱性を突かれたらしく、メールキューが溜まってしまいメールサーバーを停止されてしまいました。 脆弱性の件はアップデートをし治ったと思われるのですが、レンタルサーバーに連絡したところ復帰するには 「サーバー内に大量のメールが溜まってをおりますので、お手数ではございますが、サーバー内のメールを削除いただきますようお願いいたします。」 という話をされ、Plesk上で削除を試みたのですがあまりにもメールキューが多いらしく反応できない状況で、再度問い合わせたところ参考サイトを紹介されました。 http://www.seeds-std.co.jp/seedsblog/803.html 正直こちらを見てもさっぱりわからないというのが現状の状況です。 分からない点としてどうやってPerl プログラムを実行しコマンドの実行をどこからやればいいのか そもそも使用しているものはgmailでないのにこの辺のものは参考になっているのかという点です。 長々とした話になってしまいましたがキューの削除の導入方法と起動方法を教えて頂けないでしょうか。 よろしくお願いいたします。

  • プログラムの削除が出来ません。

     コントロールパネルから、プログラムの追加と削除をクリックすると、『指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。「フォルダオプション」コントロールパネルでプログラムを関連付けて下さい。』というメッセージが出ます。  その前に、子供がオンラインゲーム「メイプルストーリー」をしていて、変なメッセージが出たというので見に行ったら、ウイルスセキュリティのメッセージでハッキングの恐れがありますみたいな事が書いてあり、ゲームは強制的にログアウト状態になっていました。怖くなったのと、前からメイプルするとパソコンの調子が悪くなるので、この際プログラムから削除しようと思って最初に書いた「プログラムの追加と削除」をクリックした次第です。←これが出来ません。    もうひとつ、『指定された・・・』のメッセージが出る前に、同じくウイルスセキュリティから「ご確認」ということで以下のメッセージが表示されました。 ファイルの関連付けが変更されました。コマンドに関係するExe(Windows Program files)ファイルの拡張が変更されました。ウィルスの可能性があります。 旧エントリー: 現在のエントリー:”%1”%*  で、一度はウィルスの可能性があるならばと、「ブロックする」を押しました。これが原因でプログラムの追加と削除の項目が開けなくなったのでしょうか?  そして、あれこれあつかっているうちに動かなくなってしまったので強制的に電源を落とし、再び電源を入れたところ、またご確認のメッセージ(上記と同じ)が出たので、今度は「一括許可」を押してみようか、でも危ないのだろうかと躊躇しているところです。メッセージが出たまま、インターネットには接続出来たので、このご相談を書いているところです。  知りたいのは、一括許可を押してよいものか、それと押したら、プログラムの追加と削除が開けるようになるのかということです。  ちなみにパソコンはWindows XPです。

  • スレッドとメッセージキューに関して

    現在、下記のようなプログラムを作成しています。 内容は、メッセージキューを受信するスレッドを生成するというイメージです。 処理内容は下記のようになります。  (1)メッセージキューの生成  (2)スレッド生成(メッセージキュー受信側)  (3)スレッド停止  (4)メッセージキューの削除 しかし、(3)のスレッド停止を実施しても、(4)のメッセージキューの削除以降にて、msgrcvのエラーが出力されてしまいます。 スレッド停止を行ったことから、TestThreadは動作しなくなり、(4)のメッセージキューの削除にて、エラーともならずに終了することを望んでりますが、上手くいきません。 下記に作成しているプログラムを記載いたします。 正常終了をするには何がいけないのでしょうか? ご教授宜しくお願い致します。 [test.cc] ---------------------------------------------------------------- #include <time.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <ctype.h> #include <stdlib.h> #include <pthread.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/msg.h> // メソッドポインタ定義 typedef void (*testT); // スレッドID pthread_t threadId; // メッセージキュー識別子 int msqId; // 送受信するメッセージ struct msgbuf{ long int type; char data[BUFSIZ]; }; // テストスレッド void TestThread() { // メッセージ struct msgbuf message; while( 1 ) { printf("### TEST ###\n"); printf("msq start\n"); // 受信 if( msgrcv( msqId, &message, BUFSIZ, 0, 0 ) == -1) { printf("ERR! msgrcv errno[%d]\n", errno); continue; } printf("msq ed\n"); sleep(1); } return; } // メイン int main(int argc, char *argv[]) { // メッセージキュー識別子退避変数 int testMsqid; // スレッド操作リターン値 int status; // スレッドa用のパラメータ pthread_t thread_test; printf("### TEST START ###\n"); // メッセージキューの作成 if( (testMsqid = msgget((key_t)1111, 0666 | IPC_CREAT)) == -1 ) { printf("ERR! CREATE bkMsqId[%d]\n", testMsqid); return 1; } // メッセージキュー識別子を共通変数に設定 msqId = testMsqid; printf("msgget OK\n"); sleep(5); // スレッドを生成 status = pthread_create(&thread_test, NULL, (void*(*)(void*))TestThread, (void*)NULL); if(status!=0) { printf("pthread_create ng\n"); return 1; } printf("pthread_create OK\n"); sleep(5); // スレッド停止 status = pthread_cancel(thread_test); // スレッド停止結果 if ( status != 0 ) { printf("pthread_cancel ng\n"); return 1; } printf("pthread_cancel OK\n"); sleep(5); // メッセージキューの削除 if ( msgctl( msqId, IPC_RMID, NULL) == -1 ) { printf("msqId[%d] errno[%d]\n", msqId, errno); return 1; } printf("msgctl OK\n"); sleep(5); printf("### TEST E N D ###\n"); return 0; } ----------------------------------------------------------------

  • sendmailのキュー

    古いメールサーバを廃棄します。 その前にキューにたまったメールの処理をしたいと思います。 キューの消し方は、mailqコマンドでメッセージIDを調べ、 【手順1】 $ rm /var/spool/mqueue/dfJAA00**** $ rm /var/spool/mqueue/qfJAA00**** などとすればよいと聞きました。→d***とq***を消す。 しかし、/var/spool/mqueueをみると、頭文字がdやqのメッセージ ばかりではなく、頭文字が大文字のQや大文字のT、小文字のt、 小文字のxなどのファイルがあります。 これらのファイルは、どのような性質のファイルなのでしょうか? 【手順1】を実行すれば、自動的に消えてくれるようなファイル なのでしょうか? mailqコマンドで、メールキューがなくなった後も、これらのファイルが残っていた場合の対処方法などもご教授いただければ幸いです。 よろしくお願いいたします。

  • MySQLのVIEWテーブルが削除できない

    PHPプログラムを作りながらMySQLクエリをしていました。MySQLのクエリの過程でviewを作っていましたが開発中なので、createはしたもののdropしないというのをくりかえしてました。 プログラムができたので、createしたら終了時にdropして始末できるようにしました。 そこで、開発過程で残ってしまったviewを、phpMyAdminやコマンドで削除しようとしましたが削除できません。 強制的でもいいので削除する方法を教えてください。

  • linux_ メッセージキューの使用方法

    よろしくお願いします。 メッセージキューの使用方法に関して、とても頭を痛めております。 使用しているOSはLINUX DEBIAN4.0 コンパイラはGCCです。 簡単に申し上げますと、メッセージキューで送信する構造体の構造体の構造体のメンバの値が取得できず、取得しても0になってしまうところです。 ちなみに構造体の形は typedef struct { long mtype; <- 1を代入 uint16 command; <- 選別子として仕様 uint16 length;  <- 問題としていない uint16 number;  <- 問題としていない T_BUFF buff; <----------- ここが問題 } aaa; このT_BUFFの構造体の中身は typedef union _T_EngBuf { uint8 buff[32]; uint8 bbb[256]; uint8 ccc[256]; T_DDD ddd; T_EEE eee; T_FFF fff; T_GGG ggg; T_HHH hhh; T_JJJ jjj[**]; } T_BUFF; この中の各構造体のメンバの値が取得できないのです。 しかしながら、buf[32]やbbb[256]といった配列に関してはちゃんと取得できます。 ちなみに送受信のサイズ、キューID、sndとrcvとgetの文法はあっていると思います。 共有体をもちいてはメッセージの送受信はできないのでしょうか? もし可能だとしたら、共有体での送受信の方法を教えてください。 よろしくお願いします。

  • linuxでのdir削除について

    linuxコマンドに詳しい方ご教授ください。 linuxでdirを削除したいのですが 条件があります。 あるdirの下にある特定名のdir(dir名は固定)があるdirのみを一括で削除したいのですがこういったことはできるでしょうか? できれば1コマンドがありがたいです。

  • 印刷キュー

    Epsonプリンタから最近TS8130に置き換えました。 家中ネットワークにプリンターサーバを噛ましたUSB接続です。 複数イメージを印刷するとき、プリント完了後のキューからの削除がされず、印刷中のままとなります。いちいち削除しなければならないのですが、対処できますか? ※OKWAVEより補足:「キヤノン製品」についての質問です。