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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

2回答

4911閲覧

Linux セグメンテーションフォルト時のメッセージをファイルにリダイレクトさせたい

N_KONDO

総合スコア13

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

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

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2016/05/18 05:38

編集2016/05/18 06:19

###前提・実現したいこと
お世話になっております。
CentOS6.7+Calibre(フリーソフト)での、セグメンテーションフォルトのファイルリダイレクトについて
CentOSの環境で、Calibreを利用したdocx->epub変換を行っています。
docxファイルの内容によっては、セグメンテーションフォルトが起こるのですが、このときにコマンドに表示されるセグメンテーションフォルト発生のメッセージをリダイレクトさせたいと考えています。
標準出力や標準エラーと違い、どうしてもセグメンテーションフォルトをファイルリダイレクトさせることができません。
ネット検索等しましたが、有用な情報は得られませんでした。

###発生している問題・エラーメッセージ
Calibreでのdocx->epub変換時に、セグメンテーションフォルトのメッセージを、指定したファイルにリダイレクトすることができません。
###試したこと
標準出力や標準エラーをリダイレクトさせる方法ではうまくいきませんでした。
ebook-convert input.docx output.docx 2> file.txt
標準エラー出力の内容がfile.txtへ
ebook-convert input.docx output.docx 1> file.txt
標準出力の内容がfile.txtへ
ebook-convert input.docx output.docx > file.txt 2>&1
標準出力と標準エラーがfile.txtへ
いずれの場合も、セグメンテーションフォルト発生を示すメッセージだけが、コマンド上に表示され、リダイレクトされませんでした。

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

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

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

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

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

takasima20

2016/05/18 05:40

「うまくいかなかった」書き方を提示したらアドバイスがつくかもしれません。
N_KONDO

2016/05/18 06:02

takasima20様 ご助言ありがとうございます。 質問を修正します。
guest

回答2

0

ベストアンサー

投稿2016/05/18 06:32

takasima20

総合スコア7458

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

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

N_KONDO

2016/05/18 06:47

takasima20様 ご回答くださりありがとうございます。 ご提示くださった方法を試してみましたところ、bash_output.fileに、セグメンテーションフォルトを示すメッセージがリダイレクトされていました。 これでやりたかったことができそうです。 ありがとうございました。 ベストアンサーにさせていただきます。
guest

0

それは原理的に無理だと思います。

というのは、標準入出力や標準エラー出力、そしてリダイレクトというのはシェル(インターフェース)の機能だからです。

しかし、コンピュータのメモリーはカーネルが直に管理していて、セグメンテーションフォルトを犯した(禁止領域にアクセスした)プリセスに対しては直接 SIGSEGV シグナルを送って停止させてしまいます。

ですから、シェル経由でエラーメッセージが表示された時点では、メッセージをリダイレクトしようとしたプロセスは終了してしまっているので、いかなる手段を使ってもリダイレクトする事はできません。

ではどうするかと言えば、一般論になりますが、カーネルから送られて来た SIGSEGV シグナル自体を補足してエラーハンドリングを行います。

ですから、シグナルによる割り込みを制御出来る処理系(Cやシェルスクリプト)なら対応可能ですが、それ以外だと難しいと思います。

具体的な方法については下記ページなどを参考にしてみてください。

シグナルと trap コマンド
SIGSEGVをキャッチし、なおかつそこから元の処理を継続する。

投稿2016/05/18 06:28

pi-chan

総合スコア5936

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

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

N_KONDO

2016/05/18 06:44

pi-chan様 丁寧な解説をくださりありがとうございます。 シェルやカーネルについては、表面上の浅い理解しかしておらず、そのまま放置してしまっておりました。 また、恥ずかしながらSIGSEGVシグナルものについても、初耳でした。 参考ページを読みながら、勉強します。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問