LINUX.ORG.RU

core


0

0

от чего зависит генерится core файл при сегволте или нет?

anonymous

И в FAQ'е должен быть вопрос типа "Yow to enable/disable core dumps"

Ikonta_521
()
Ответ на: комментарий от ananas

2ananas (*) (2003-07-08 14:38:42.383954):

man -k ulimit
мало поможет, т.к.ulimit - встроенная функция bash.
Если ты живешь под tcsh, например, то никакого ulimit'а ты не найдешь.

Под bash'ем:
ulimit -c
покажет текущее ограничение на размер core файла

ulimit -c unlimited
уберет ограничения.

Die-Hard ★★★★★
()

man -k работает как apropos

и через man 3 ulimit можно найти man 2 setrlimit который не зависит от оболочки :)

ananas ★★★★★
()
Ответ на: комментарий от ananas

2ananas (*) (2003-07-08 15:22:13.743721):

> ...можно найти man 2 setrlimit который не зависит от оболочки :)
AFAIK setrlimit НЕ позволяет регулировать размер core файла.

Конечно, можно через man 3 ulimit узреть:
For the shell command ulimit, see bash(1).
Только мне показалось, что это не совсем понятно для того, кто не знает,
о чем речь.

IMHO спрашивающего интересовало, что надо сделать, чтобы разрешить/запретить
генерацию core файлов. Это делается через встроенную команду
bash ulimit (для tcsh - limit).

Die-Hard ★★★★★
()

> AFAIK setrlimit НЕ позволяет регулировать размер core файла.

чесно говоря, никогда не пользовался, но судя по ману, есть ресурс

RLIMIT_CORE /* max core file size */

ananas ★★★★★
()
Ответ на: комментарий от ananas

ananas (*) (2003-07-08 17:35:41.201954):
В последних версиях мануалов про setrlimit под Линуксом он (RLIMIT_CORE) 
почему-то исчез. У меня в системе такого нет (SuSE Linux 8.1)

Однако я сейчас попробовал - работает!:
#include <sys/resource.h>
#include <unistd.h>
#include <signal.h>

int main() {
  struct rlimit rl;

  rl.rlim_max = rl.rlim_cur = 10000000;
  if (setrlimit(RLIMIT_CORE,&rl)) perror("setrlimit");
  raise(11);
  return 0;
}

$ulimit -c
0
$./try
Segmentation fault (core dumped)

Все ж, IMHO, вопрос был про ulimit (limit под tcsh)

Die-Hard ★★★★★
()

насчет вопроса - согласен

но в начале

#if DEBUG
rl.rlim_max = rl.rlim_cur = 10000000;
if (setrlimit(RLIMIT_CORE,&rl)) perror("setrlimit");
#endif

и в конце

#if DEBUG
rl.rlim_max = rl.rlim_cur = 0;
if (setrlimit(RLIMIT_CORE,&rl)) perror("setrlimit");
#endif

имхо, тоже ничего решение, особенно, когда неохота получать корки от всех глючных поделок сразу

ananas ★★★★★
()
Ответ на: комментарий от ananas

ananas (*) (2003-07-09 13:55:51.720204)

> и в конце

> #if DEBUG
> rl.rlim_max = rl.rlim_cur = 0;
> if (setrlimit(RLIMIT_CORE,&rl)) perror("setrlimit");
> #endif
Совершенно безсмысленное действие, если твой процесс не оставил после
себя детишек. Лимиты наследуются процессами, но повлиять на лимиты
НЕ своего потомка процесс не может,

Die-Hard ★★★★★
()

Зависит от трех факторов: 1) dumpable флаг (prctl PR_GET_DUMPABLE/PR_SET_DUMPABLE). В частности dumpable по умолчанию сброшен для любого вида setuid/setgid приложений.

2) RLIMIT (упомянутый выше). 3) возможности создать соотв. core file ;)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.