私たちの研究室には、アプリケーションとその出力を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シリーズツールセット:
softlimit
デーモンツールからsoftlimit
艦隊でsoftlimit
daemontools-encoreからsoftlimit
幼い頃からおやつs6-softlimit
s6からchpst
ルーネットからrunlimit
犯罪者から
したがって、softlimit
noshツールセットを例として使用して、次のことを実行できます。
gnome-terminal -t A --tab -e "softlimit --coresize unlimited ./app1"
スクリプトでサブシェルを使用します。
これは、端末エミュレータプロセスの制限にも当てはまります。この場合はかなり大丈夫でしょう。ただし、オープンファイルハンドル制限やプロセスブランチ制限などの他の制限が適用される場合、問題になる可能性があります。
(ulimit -c 無制限; urxvt -e "./app1")
気づくこれは、GNOME端末またはUnicode RXVTのクライアント - サーバーバリアントには適用されません。。これらのどれも、端末エミュレータをスクリプトの下付き文字として直接呼び出すことはありません。これらは、スクリプトに設定されたリソース制限を持っているか取得できないサーバープロセスを介してリモートコールを実行します。
GNOME端末を起動しますulimit
。
覚えておいてください。下から上に構築する必要があります。
- コマンドリスト操作を実行するには、実際のシェルが必要です。
ulimit -c 無制限実行 "./app1"
- このコマンドのリストを渡すには、
sh
次のものが必要です。すべて議論ですその後-c
は引用が必要です。sh -c "ulimit -c 無制限 ; exec \"./app1\""
sh
GNOME 端末に呼び出しを転送するには、以下も必要です。すべて議論ですその後、-e
2番目のレベル参照を適用する必要があります。gnome-terminal -e 'sh -c "ulimit -c 無制限 ; exec \"./app1\""'
答え2
ulimit -c
これは、ハード制限を提供せずにソフト制限を提供します。ハード制限はスーパーユーザーのみ変更でき、ソフト制限は誰でも変更できます。ソフト制限を変更すると、そのプロセスにのみ影響します。
MacOSの場合:
$ charlie on macbook in ~
❯❯ ulimit -aS
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 7168
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
$ charlie on macbook in ~
❯❯ ulimit -aH
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) unlimited
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 65532
cpu time (seconds, -t) unlimited
max user processes (-u) 1064
virtual memory (kbytes, -v) unlimited
あなたの場合、ハード制限は無制限で、ソフト制限はデフォルトでゼロです。ulimit
このプロセスでは、ファイルを直接使用または編集してソフト制限を変更できます/proc/FD/limits
。