注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

linux开启已经运行的程序的core dump, prlimit  

2015-04-02 15:10:47|  分类: linux相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
ulimit -c unlimited   只对调用的进程起作用。

要设置其他已经运行的进程的,需要prlimit 这个系统调用来实现。 新的util-linux  包 (版本大于2.21 f)里新增了了prlimit 命令。不过旧版的系统都没有这个新版的包。   需要自己调用system call 来实现。

http://linux.die.net/man/2/prlimit
https://github.com/karelzak/util-linux/blob/master/sys-utils/prlimit.c

参考 这几个api的说明

int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int
 resource, const struct rlimit *rlim);

int prlimit(pid_t pid, int resource, const struct rlimit *new_limit,
struct rlimit *
old_limit);


自己写个简单的程序实现 prlimit的功能

/* gcc -o prlimit prlimit.c */

#define _GNU_SOURCE
#define _FILE_OFFSET_BITS 64
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/resource.h>
#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0)

int
main(int argc, char *argv[])
{
struct rlimit old, new;
struct rlimit *newp;
pid_t pid;

if (!(argc == 2 || argc == 4)) {
fprintf(stderr, "Usage: %s <pid> [<new-soft-limit> "
"<new-hard-limit>]\n", argv[0]);
exit(EXIT_FAILURE);
}

pid = atoi(argv[1]); /* PID of target process */

newp = NULL;
if (argc == 4) {
new.rlim_cur = atoi(argv[2]);
new.rlim_max = atoi(argv[3]);
newp = &new;
} else {
new.rlim_cur = RLIM_INFINITY;
new.rlim_max = RLIM_INFINITY;
newp = &new;
}

if (prlimit(pid, RLIMIT_CORE, newp, &old) == -1)
errExit("prlimit-1");
printf("Previous core file size limits: soft=%lld; hard=%lld\n",
(long long) old.rlim_cur, (long long) old.rlim_max);

/* Retrieve and display new CPU time limit */

if (prlimit(pid, RLIMIT_CORE, NULL, &old) == -1)
errExit("prlimit-2");
printf("New core file size limits: soft=%lld; hard=%lld\n",
(long long) old.rlim_cur, (long long) old.rlim_max);

if ( old.rlim_cur != new.rlim_cur ||
old.rlim_max != new.rlim_max) {
fprintf(stderr , "failed to change core file size of process %d .", pid);
exit(EXIT_FAILURE);
}

exit(0);
}



  评论这张
 
阅读(430)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017