我有一個Perl腳本,它執行各種安裝步驟來爲我們公司設置開發框。它運行各種shell腳本,其中一些腳本由於低於所需的ulimit
s而崩潰(具體來說,在我的情況下,堆棧大小爲-s
)。如何在適用於子級的Perl腳本中設置ulimit?
因此,我想設置一個ulimit
適用於從我的主Perl內啓動的所有腳本(children
),但我不知道如何實現這一點 - 任何嘗試從腳本內調用ulimit只能將其設置在立即退出的特定子shell上。
我知道,我可以在運行Perl腳本或使用/etc/security/limits.conf
之前調用ulimit
,但我不希望用戶知道這些 - 他們應該只知道如何運行腳本,這應該照顧所有這些對他們來說。
我每次運行一個命令時也可以運行ulimit
,就像這樣ulimit -s BLA; ./cmd
但我不想每次都重複這個,我覺得這裏有一個更好,更乾淨的解決方案。
另一個瘋狂的「解決方法」是製作一個名爲BLA.sh的包裝腳本,它將設置ulimit並調用BLA.pl,但這又是一個黑客,現在我有兩個腳本(我甚至可以使BLA.pl自動調用「ulimit -s BLA; ./BLA.pl --foo」,並根據它是否看到--foo或不同,採取不同的行動,但這比以前更加黑客)。
最後,顯然我可以安裝BSD ::資源,但我想避免使用外部依賴。
那麼什麼是THE如何設置Perl腳本中的ulimit並使其適用於所有的孩子?
謝謝。
只需使用BSD :: Resource。或者,編譯你自己的XS模塊來做同樣的事情。不知道爲什麼你會那樣做。 – ysth 2010-02-09 02:34:58