Как закрыть само приложение и терминал? - PullRequest
3 голосов
/ 04 августа 2011

В моем консольном приложении C я хотел бы выйти из приложения и одновременно запустить команду выхода, чтобы закрыть терминал. Однако следующий код не работает. После запуска приложения оно выходит из приложения, но не закрывает терминал.

int main(void)
{
  system("exit");
  return 0;
}

Пожалуйста, дайте любой совет.

Ответы [ 6 ]

3 голосов
/ 04 августа 2011

Ваша команда "exit" не отправляется в оболочку, которая запустила вашу программу, а скорее в новую оболочку, выполненную явно для выполнения вашей команды. Это ничего не дает.

Ваша программа не может выйти из оболочки, которая ее запустила, без какого-либо сотрудничества с этой оболочкой. Например, если мы работаем с оболочкой bash или Bourne в UNIX, если в терминале вы запускаете программу, используя

exec theprogname

затем запускающая оболочка заменяется вашей программой, и поэтому, когда ваша программа закрывается, оболочка закрывается.

2 голосов
/ 04 августа 2011

Команда system создает процесс оболочки new и выдает команду этой оболочке, поэтому при вводе exit она закроет только новую оболочку.

Способ сделать то, что вы просите, это:

#include <unistd.h>
#include <signal.h>
int main(int argc, char *argv[])
{
    kill(getppid(), SIGKILL);
    return 0;
}

Однако это ПЛОХАЯ ИДЕЯ (по многим причинам: вы слепо убиваете какой-то процесс, который породил ваш, не имея ни малейшего представления о том, что это на самом деле ... это может быть оболочка входа пользователя или это может быть init). Вы, вероятно, просто хотите закрыть окно терминала, верно? Затем запустите вашу программу так:

xterm -e my_program

Это запустит вашу программу в собственном окне, которое закрывается, когда программа завершает работу. Нет хитрости, и она работает с любой программой.

1 голос
/ 04 августа 2011

Возможно, это будет работать, если вы используете сигнал при завершении программы. а. к. а.

#include <signal.h>
#include <stdio.h>

void terminate(int param)
{
   system("exit");
}

int main()
{
   void (*sig)(int);
   sig = signal(SIGTERM, terminate);
   return 0;
}
0 голосов
/ 04 августа 2011

Если вы просто хотите скомпилировать, запустить, а затем закрыть окно, вы можете создать файл make, тогда все, что вам нужно сделать, это набрать make в командной строке.Чтобы сделать это с вашим файлом make, вы можете сделать что-то вроде этого:

EXEC   = program
NAME   = prog
RUN    = gcc
EXIT   = exit

$(EXEC): 
    $(RUN) -o $(EXEC) $(NAME)
    $(EXEC)
    $(EXIT)

Я не проверял это, но это в основном то, что вам нужно.Вот еще один пример файла make: http://www -rohan.sdsu.edu / faculty / gleonard / html / Makefile

Этот файл удалит созданный файл, поэтому вы не сможетене получается "файл обновлен" ошибка.Надеюсь, это поможет

0 голосов
/ 04 августа 2011

Просто - просто запустите его на Windows.Окна терминала будут автоматически закрываться при выходе из программы.(Может быть, есть способ изменить это, но я ничего не знаю).

Но я так понимаю, вы ищете что-то своеобразное для C. Извините, но вам не повезло.Все идет в зависимости от ОС.В качестве примера представьте, что вы работаете над старой системой DOS или чем-то еще, где все, что существует, это консоль.Вы не можете действительно закрыть терминал, кроме выключения, потому что это все, что есть.Этот пример должен по крайней мере проиллюстрировать, как такой язык, как C, не может гарантировать эту функциональность.

0 голосов
/ 04 августа 2011

Хорошо, 9А, вам нужно использовать void main () вместо int main (void) и вам нужно вызвать getch (); функционирует в конце процедур внутри main () и включает заголовок conio.h в самом верху вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...