本文主要是介绍【shell】shell脚本设置ulimit -c unlimited但脚本结束后系统ulimit -c未生效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题现象
-
在程序启动脚本中设置了ulimit -c unlimited,但是查看系统环境ulimit -c却未生效,仍显示0
-
脚本如下
#! /bin/bash ulimit -c unlimited echo "password" | sudo -S sysctl -w kernel.core_pattern=/your_path/core.%e.%p.%t.%s./test/main # 执行程序
问题原因
-
shell脚本中执行该命令,shell中内置命令只会影响当前shell会话及其子进程
-
也就是说
- 如果在脚本内设置了ulimit -c unlimited并同时启动程序,程序出现coredump是能记录core文件的
- 但是脚本结束后再单独启动程序,ulimit -c unlimited可能没生效,程序奔溃后也未能记录core文件
测试程序
-
main.cpp
include <iostream> include <string>using namespace std;int main() {std::string my_str = “abcdef”;auto* str_ptr = &my_str;str_ptr[1] = 'g';return 0; }
-
编译
g++ -o main main.cc
-
start.sh
#! /bin/bash ulimit -c unlimited echo "password" | sudo -S sysctl -w kernel.core_pattern=/your_path/core.%e.%p.%t.%s./main
-
./start.sh启动程序出现coredump后,因为在同一会话中会保存core文件
解决方法
-
要永久修改core文件限制,需修改系统的配置文件 /etc/security/limits.conf
#* soft core 0修改为#* soft core unlimited # 为所有用户设置无限制大小的core dump文件
-
请注意,core dump文件可能占用大量磁盘空间,需确保指定路径有足够的可用空间
created by shuaixio, 2024.04.04
这篇关于【shell】shell脚本设置ulimit -c unlimited但脚本结束后系统ulimit -c未生效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!