正しいチェーンロードコマンドを使用してください。

正しいチェーンロードコマンドを使用してください。

私たちの研究室には、アプリケーションとその出力を1つずつ実行するための次のスクリプト(CentoS 6)があります。

cd A/
sleep 1
gnome-terminal -t A --tab -e "./app1"
cd ../B/
sleep 1
gnome-terminal -t b --tab -e "./app2" 
sleep 2
gnome-terminal -t c --tab -e "./app3"

これは完璧に動作します。

ulimit -c今私たちが望むのは、アプリケーションの1つ(app3など)に対してデフォルトでコアダンプファイルを生成することであり、デフォルトを 0変更したくありません。

gnome-terminal -t c --tab -e "ulimit -c unlimited ; ./c"動作しません。インターネット検索でスクリプトを実行する必要があることがわかったときsh -c "ulimit -c unlimited"

gnome-terminal -t c --tab -e "sh -c "ulimit -c unlimited"完璧に動作します。
しかし、
gnome-terminal -t c --tab -e "sh -c "ulimit -c unlimited ; ./app3"動作しません。

app3に対してのみコアダンプを有効にする方法は?注:私たちはこれらのことが世界中で起こることを望んでいません。

ベストアンサー1

これを行う方法は3つあります。

正しいチェーンロードコマンドを使用してください。

シェル組み込みコマンドを使用せず、ulimit代わりにこの目的のために開発されたコマンドを使用してください。様々なdaemontoolsシリーズツールセット:

したがって、softlimitnoshツールセットを例として使用して、次のことを実行できます。

gnome-terminal -t A --tab -e "softlimit --coresize unlimited ./app1"

スクリプトでサブシェルを使用します。

これは、端末エミュレータプロセスの制限にも当てはまります。この場合はかなり大丈夫でしょう。ただし、オープンファイルハンドル制限やプロセスブランチ制限などの他の制限が適用される場合、問題になる可能性があります。

(ulimit -c 無制限; urxvt -e "./app1")

気づくこれは、GNOME端末またはUnicode RXVTのクライアント - サーバーバリアントには適用されません。。これらのどれも、端末エミュレータをスクリプトの下付き文字として直接呼び出すことはありません。これらは、スクリプトに設定されたリソース制限を持っているか取得できないサーバープロセスを介してリモートコールを実行します。

GNOME端末を起動しますulimit

覚えておいてください。下から上に構築する必要があります。

  1. コマンドリスト操作を実行するには、実際のシェルが必要です。
    ulimit -c 無制限実行 "./app1"
  2. このコマンドのリストを渡すには、sh次のものが必要です。すべて議論ですその後-cは引用が必要です。
    sh -c "ulimit -c 無制限 ; exec \"./app1\""
  3. shGNOME 端末に呼び出しを転送するには、以下も必要です。すべて議論ですその後、-e2番目のレベル参照を適用する必要があります。
    gnome-terminal -e 'sh -c "ulimit -c 無制限 ; exec \"./app1\""'

おすすめ記事