프로그램을 종료 할 수 없습니다.

디미트리 다닐 로프

bash와 같은 명령 인터프리터를 수행하려고하는데 약간의 문제가 있습니다.

ls / cat / grep과 같은 기존 명령을 실행하면 문제없이 작동하지만 qsdjhkoqd와 같은 명령을 실행하려고하면 명령을 찾을 수 없다는 메시지가 표시되고 그 후에 종료하려고하면 종료되지 않습니다.

예를 들어 나쁜 댓글을 4 개하면 프로그램을 종료하려면 5 번의 종료를해야합니다. 나는 그것이 확실히 프로세스 문제라는 것을 알고 있지만 그것을 고치는 방법을 모르겠습니다. 내가 어디에서 잘못되었는지 말해 줄 수 있습니까?

감사 !

int im_your_father(t_struct *tool, char **env, char **argv)
{
  int   ret;

  ret = 0;
  if (tool->command.pid == 0)
    {
      ret = execve(tool->command.command, argv, env);
    }
  else
    wait(NULL);
  return (ret);
}

int execute_path(t_struct *tool , char **env , 
             char **argv, t_first_elem *list)
{
  int   i;
  int   ret;

  tool->command.pid = fork();
  (void)list;
  i = -1;
  if (my_strcmp("ls", argv[0]) == 0)
    {
      while (argv[++i] != NULL)
    ;
      argv[i] = my_strdup("--color=auto");
      argv[++i] = NULL;
      i = -1;
    }
  while (tool->path[++i] != NULL)
    { 
      tool->command.command = my_strdup_mod(tool->path[i], 
                        my_strlen(tool->command.line));
      my_strcat(tool->command.command, "/");
      my_strcat(tool->command.command, argv[0]);
      ret = im_your_father(tool, env, argv);
      if (ret != -1)
    return (0);
    }
  if (tool->command.pid == 0)
    {
      my_putstr("son alive");
    }
  else
    {
      printf("%d\n", tool->command.pid);
      wait(NULL);
    }
  my_putstr(argv[0]);
  my_putstr(":   command not found\n");
  return (0);
}
조나단 레플러

문제는 대부분 다음 줄에 있다고 생각합니다.

if (tool->command.pid == 0)
{
    ret = execve(tool->command.command, argv, env);
}

우선 .NET Framework에서 반환 값을 캡처 할 필요가 없습니다 execve(). 성공하면 반환되지 않습니다. 전혀 반환되지 않으면 실패한 것입니다.

둘째, 다음에 무슨 일이 일어날 지 고려해야합니다. 짧은 대답은 이제 두 개의 프로세스가 있으며 둘 다 자신의 셸이라고 생각하는 것입니다. 이제 입력을 읽으려는 두 개의 프로세스가 있으며, 그들은 누가 각 캐릭터를 얻는 지에 대해 다투고, 그 결과는 인간 아이들이 좋아하는 장난감을 사용하는 순서에 대해 다투는 것처럼 엉망입니다.

대부분의 경우, 특히 셸에서 execve()실패하면 오류 메시지를 생성 한 후 종료 할 수 있습니다.

if (tool->command.pid == 0)
{
    execve(tool->command.command, argv, env);
    fprintf(stderr, "failed to execute %s (%s)\n", tool->command.command, strerror(errno));
    exit(127);
}

정확한 종료 상태는 협상 가능합니다. 나는 보통을 사용 1하지만 POSIX 표준은 명령 실행에 실패 할 때 종료 상태를 규정합니다 .

명령이 발견되지 않으면 종료 상태는 127이됩니다. 명령 이름이 발견되었지만 실행 가능한 유틸리티가 아닌 경우 종료 상태는 126이됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

프로그램을 종료 할 수 없습니다.

분류에서Dev

응용 프로그램을 종료 할 수 없습니다.

분류에서Dev

Java .txt 작성 프로그램을 종료 할 수 없습니다.

분류에서Dev

실행중인 프로그램 / 응용 프로그램을 종료 할 수 없습니다.

분류에서Dev

미로 프로그램을 완료 할 수 없습니다.

분류에서Dev

파이썬에서 프로그램 종료를 강제 할 수 없습니다.

분류에서Dev

Android는 애플리케이션을 종료 할 수 없습니다. 응용 프로그램 다시 시작

분류에서Dev

Windows 7은 Swing 응용 프로그램의 원인을 종료 할 수 없습니다.

분류에서Dev

프로그램 종료시 루프 문제, 종료 할 수 없음

분류에서Dev

루프 / 프로그램을 종료해야하는 입력이 '종료'일 때 Java가 인식하도록 할 수 없습니다.

분류에서Dev

SenCha Touch는 전체 화면을 볼 수 있고 응용 프로그램을 종료 할 수 없습니까?

분류에서Dev

Excel 프로세스를 종료 할 수 없습니다.

분류에서Dev

PHP 데몬 프로세스를 종료 할 수 없습니다.

분류에서Dev

gunicorn 프로세스를 종료 할 수 없습니다.

분류에서Dev

while 루프는 NSLog 없이는 종료 할 수 없습니다.

분류에서Dev

추가 함수는 for 루프를 종료 할 수 없습니다.

분류에서Dev

:! q로 Vim을 종료 할 수 없습니다

분류에서Dev

그놈 세션을 종료 한 후 로그인 할 수 없습니다.

분류에서Dev

그놈 세션을 종료 한 후 로그인 할 수 없습니다.

분류에서Dev

무한 루프를 종료 할 수 없습니다.

분류에서Dev

do while 루프를 종료 할 수 없습니다.

분류에서Dev

VB.NET-For / Next 루프를 종료 할 수 없습니다.

분류에서Dev

C ++의 while 루프를 종료 할 수 없습니다.

분류에서Dev

Windows 10에서 아이콘을 종료하도록 프로그램을 지정할 수 있습니까?

분류에서Dev

MongoError : 종료 된 세션을 사용할 수 없습니다.

분류에서Dev

터미널을 통해 종료 할 수 없습니다.

분류에서Dev

커널 패닉을 종료 할 수 없습니다.

분류에서Dev

프로그램을 종료하기 위해 n 번의 질문 생성에 "q"를 입력해야하는 이유를 이해할 수 없습니다.

분류에서Dev

Netbeans에서 windowClosing 이벤트를 사용자 정의한 후 Java 프로그램을 종료 할 수 없습니다.

Related 관련 기사

  1. 1

    프로그램을 종료 할 수 없습니다.

  2. 2

    응용 프로그램을 종료 할 수 없습니다.

  3. 3

    Java .txt 작성 프로그램을 종료 할 수 없습니다.

  4. 4

    실행중인 프로그램 / 응용 프로그램을 종료 할 수 없습니다.

  5. 5

    미로 프로그램을 완료 할 수 없습니다.

  6. 6

    파이썬에서 프로그램 종료를 강제 할 수 없습니다.

  7. 7

    Android는 애플리케이션을 종료 할 수 없습니다. 응용 프로그램 다시 시작

  8. 8

    Windows 7은 Swing 응용 프로그램의 원인을 종료 할 수 없습니다.

  9. 9

    프로그램 종료시 루프 문제, 종료 할 수 없음

  10. 10

    루프 / 프로그램을 종료해야하는 입력이 '종료'일 때 Java가 인식하도록 할 수 없습니다.

  11. 11

    SenCha Touch는 전체 화면을 볼 수 있고 응용 프로그램을 종료 할 수 없습니까?

  12. 12

    Excel 프로세스를 종료 할 수 없습니다.

  13. 13

    PHP 데몬 프로세스를 종료 할 수 없습니다.

  14. 14

    gunicorn 프로세스를 종료 할 수 없습니다.

  15. 15

    while 루프는 NSLog 없이는 종료 할 수 없습니다.

  16. 16

    추가 함수는 for 루프를 종료 할 수 없습니다.

  17. 17

    :! q로 Vim을 종료 할 수 없습니다

  18. 18

    그놈 세션을 종료 한 후 로그인 할 수 없습니다.

  19. 19

    그놈 세션을 종료 한 후 로그인 할 수 없습니다.

  20. 20

    무한 루프를 종료 할 수 없습니다.

  21. 21

    do while 루프를 종료 할 수 없습니다.

  22. 22

    VB.NET-For / Next 루프를 종료 할 수 없습니다.

  23. 23

    C ++의 while 루프를 종료 할 수 없습니다.

  24. 24

    Windows 10에서 아이콘을 종료하도록 프로그램을 지정할 수 있습니까?

  25. 25

    MongoError : 종료 된 세션을 사용할 수 없습니다.

  26. 26

    터미널을 통해 종료 할 수 없습니다.

  27. 27

    커널 패닉을 종료 할 수 없습니다.

  28. 28

    프로그램을 종료하기 위해 n 번의 질문 생성에 "q"를 입력해야하는 이유를 이해할 수 없습니다.

  29. 29

    Netbeans에서 windowClosing 이벤트를 사용자 정의한 후 Java 프로그램을 종료 할 수 없습니다.

뜨겁다태그

보관