こんにちは私は、(オーバーフロー/セグメント化の障害)の例外を処理することにより、利用可能なスタックを動的に増加させるプロセスを実装しようとしています。動的にプロセスのスタックサイズを増加させる方法
ここでは、スタックに領域を再帰的に割り当てることで、SIGSEGVを出すまでスタックを拡張しています。この例外をハンドラで処理し、getrlimitとsetrlimitを使用してプロセスのリソース制限を増やしています。これはうまくいかないと思うので、私がraise()によってSIGSEGVをプログラムで生成しようとした場合、なぜスタックサイズを増やすことができるのですか?
#include<unistd.h>
#include<sys/resource.h>
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<sys/time.h>
void allocate(void);
void handler(int sig)
{
struct rlimit r;
getrlimit(RLIMIT_STACK,&r);
r.rlim_cur=r.rlim_cur *5; // increasing stack size five times
setrlimit(RLIMIT_STACK,&r);
write(1,"Handler",7); //to check handler invocation
//signal(SIGSEGV,SIG_DFL);
}
int cntz=0xfff; //for adusting recursion
int main()
{
struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_flags=0;
sa.sa_handler=handler;
sigaction(SIGSEGV,&sa,NULL);
//raise(SIGSEGV); to raise self signal to increase stack size
allocate();
//getchar();
exit(1);
}
void allocate()
{
char staczzk[5000]; //allocating memory on stack in each
recursive call
cntz--;
printf("%d\n",cntz);
if (cntz==0)
return;
allocate(); //recusrive call
}
'設定しよう:sigaltstack man pageからのコードと一緒にあなたのコードに基づいており、次の06/19/1)修復は失敗または関連する問題を引き起こす可能性があります。 Red Hat [Issue 1463241](https://bugzilla.redhat.com/show_bug.cgi?id=1463241) – jww