openwrt 플랫폼 용 프로그램을 개발할 때 옵션 foreground로 프로세스를 시작하면 프로세스가 잘 실행됩니다.Ctrl + C를 사용하여 포어 그라운드에서 프로세스를 시작할 때 세그먼테이션 오류가 발생했습니다.
/usr/sbin/myprocess -f -b
(" -f, --foreground Run in the foreground\n")
(" -b, --boot Run with boot event\n")
결국 Ctrl + C
명령으로 프로세스를 중지합니다. 이로 인해 세그멘테이션 오류가 발생합니다. 내 주요 프로그램에서
이 사용 된 코드는 다음과 같습니다 전경 모드로 실행 프로세스가 특정 방법을 중지해야하는 경우
void main()
{
..........
..
bool foreground = false;
while (1) {
c = getopt_long(argc, argv, "fb", long_opts, NULL);
if (c == EOF)
break;
switch (c) {
case 'b':
start_event |= BOOT;
break;
case 'f':
foreground = true;
break;
}
}
pid_t pid, sid;
if (!foreground) { // *fourground false*
pid = fork();
if (pid < 0)
exit(EXIT_FAILURE);
if (pid > 0)
exit(EXIT_SUCCESS);
sid = setsid();
if (sid < 0) {
D("setsid() returned error\n");
exit(EXIT_FAILURE);
}
char *directory = "/";
if ((chdir(directory)) < 0) {
D("chdir() returned error\n");
exit(EXIT_FAILURE);
}
}
..........
}
내가 궁금합니다. 이 세분화 오류를 피하기 위해 C 코드를 수정하는 방법?
어디에서 잘못 했습니까? 디버깅을 한 적이 있습니까? –
어떤 디버그도 제공되지 않습니다. –
openWrt 플랫폼에서이 seg fault를 디버깅하는 방법! –