Итак, когда мы делаем a ulimit -c, он возвращает значение unlimited.
когда мы делаем ulimit -S -c, он возвращает значение unlimited.
когда мы делаем ulimit -H -c, он возвращает значение unlimited.
И когда я работаю kill -6против запущенного процесса, я не получаю ядро.
Когда я запускаю ulimit -c unlimited, и снова запускаю процесс, и запускаю kill -6, он генерирует ядро.
Может кто-нибудь объяснить, в чем разница между мягким и жестким ограничением?
И должны ли мы вообще менять жесткий предел?
Мне не нравится эта ситуация, потому что ядра иногда генерируются, а иногда нет.
Даже если я изменю limit.conf, мне бы очень хотелось понять, что я делаю.
Еще несколько вещей, которые мне нужно раскрыть, это то, что я работаю в среде RHEL 6 (x86_64).
И что на диске достаточно места, и это не процесс DAEMON или программа setuid. И в папке достаточно прав для создания новых файлов, и в каталоге времени выполнения нет файлов / папок с именем core.
2 ответа на вопрос
0
jjlin
You can read about hard vs. soft limits in the Bash manual section on ulimit.
Since you say you get a core file if you restart the program from your shell, the problem is likely that the original process is not getting started in an environment that reads /etc/profile (that file is only read for login shells). You might consider adding ulimit -c unlimited to whatever script is starting that program (before the line that starts it, of course).
0
roymustang86
Таким образом, единственная причина, по которой это происходило, заключалась в том, что скрипт запускался в приглашении sh, в отличие от приглашения bash, где был установлен ulimit. Разве это не странно? Мы изменили скрипт для запуска в bash, и теперь он работает нормально.