因为要生产coredump文件,有对IO的操作,导致退出相对于不产生coredump文件来说肯定有延迟
c
void do_coredump(const kernel_siginfo_t *siginfo)
{
struct core_state core_state;
struct core_name cn;
....
struct coredump_params cprm = {
.siginfo = siginfo,
.regs = signal_pt_regs(),
.limit = rlimit(RLIMIT_CORE),
.....
if (cprm.limit < binfmt->min_coredump)
goto fail_unlock; //// 这里会退出
如果是pipe的话,如果ulimit == 1 的时候会退出
c
if (ispipe) {
int argi;
int dump_count;
char **helper_argv;
struct subprocess_info *sub_info;
if (ispipe < 0) {
printk(KERN_WARNING "format_corename failed\n");
printk(KERN_WARNING "Aborting core\n");
goto fail_unlock;
}
if (cprm.limit == 1) {
如果要看详细的逻辑,还是需要看内核的代码。
如果想看详细的时间占用情况,可以使用ftrace的function graph的功能dump一下调用关系以及时间消耗情况。