ラボには次のスクリプト(CentoS 6)があり、出力を1つずつ使用してアプリケーションを実行します。
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"
これは完璧に機能しています。
ここで必要なのは、アプリケーションの1つ(つまりapp3)のコアダンプファイルを生成することです。ulimit -c
はデフォルトで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のみのコアダンプを有効にするにはどうすればよいですか? 注:これはグローバルには必要ありません。
これを行うには3つの方法があります。
Shell組み込みコマンドulimit
を使用する代わりに、この目的のために開発されたコマンドを使用してください。 さまざまなdaemontools-familyツールセット :
softlimit
デーモンツールからsoftlimit
from freedtsoftlimit
デーモンツールから-アンコールsoftlimit
noshからs6-softlimit
s6からchpst
runitからrunlimit
perpからしたがって、例としてnoshツールセットのsoftlimit
を使用して、実行します。
gnome-terminal -t A --tab -e "softlimit--coresize無制限./app1"
これにより、ターミナルエミュレータプロセスにも制限が適用されます。この場合、これはかなり良性です。ただし、オープンファイルハンドル制限やプロセスフォーク制限などの他の制限を適用している場合、これは問題になる可能性があります。
(ulimit-c無制限; urxvt -e "./app1")
これはGNOMEターミナルまたはUnicode RXVTのクライアントサーバーバリアントでは機能しないことに注意してください。どちらも、スクリプトの子としてターミナルエミュレータを直接呼び出すことはありません。これらはサーバープロセスを介してリモート呼び出しを実行しますが、スクリプトで設定されたリソース制限はありません。
ulimit
を実行するシェルを実行させます。これを下から上に構築する必要があることを忘れないでください。
ulimit-c無制限; exec "./app1"
sh
に渡すには、-c
の後にすべて1つの引数である必要があるため、引用符で囲む必要があります。 sh -c "ulimit-c無制限; exec \" ./ app1\""
sh
呼び出しをGNOMEターミナルに渡すには、それも-e
の後にすべて1つの引数である必要があります。引用のレベルを適用する必要があります:gnome-terminal -e'sh -c "ulimit-c無制限; exec \" ./ app1\"" '
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
あなたの場合、ハード制限はおそらく無制限であり、ソフト制限はデフォルトで0です。 ulimit
を使用するか、/proc/FD/limits
ファイルを直接編集することにより、そのプロセスのソフト制限を変更できます。