在我的C控制台应用程序中,我想退出应用程序并同时触发退出命令以关闭终端。但是,下面的代码似乎不起作用。一旦我运行应用程序,它就会退出应用程序,但不会关闭终端。
int main(void)
{
system("exit");
return 0;
}
请提出任何建议。
答案 0 :(得分:3)
您的“exit”命令没有被发送到启动程序的shell,而是一个新shell,为执行命令而明确执行。它没有做任何事情。
如果没有shell的合作,你的程序就无法干净地退出启动它的shell。例如,假设我们在UNIX上运行bash或Bourne shell,如果在终端中,则使用
启动程序exec theprogname
然后启动shell将被您的程序替换,因此当您的程序退出时,shell将退出。
答案 1 :(得分:2)
system
命令创建 new shell进程并向该shell发出命令,因此当您发出exit
时,它将仅关闭新shell。
做你要求的方法是:
#include <unistd.h>
#include <signal.h>
int main(int argc, char *argv[])
{
kill(getppid(), SIGKILL);
return 0;
}
然而,这是 A BAD IDEA (出于多种原因:你盲目地杀死了一些产生你的过程而没有真正线索它实际上是什么......它可能是用户的登录shell,或者可能是init
)。你可能只是想关闭终端窗口,对吧?然后像这样启动你的程序:
xterm -e my_program
这将在您自己的窗口中运行您的程序,该窗口在程序完成时关闭。没有任何技巧,它适用于任何程序。
答案 2 :(得分:1)
如果您在终止程序时使用信号,它可能会起作用。一个。 ķ。一个。
#include <signal.h>
#include <stdio.h>
void terminate(int param)
{
system("exit");
}
int main()
{
void (*sig)(int);
sig = signal(SIGTERM, terminate);
return 0;
}
答案 3 :(得分:0)
如果您只想编译,运行,然后关闭窗口,您可以创建一个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
那个将删除创建的文件,因此您不会收到“文件是最新的”错误。希望这有帮助
答案 4 :(得分:-1)
简单 - 只需在Windows上运行即可。当程序退出时,终端窗口将自动关闭。 (也许有办法改变这一点,但我不知道)。
但我认为你正在寻找C特有的东西。抱歉,但你运气不好。一切都是针对特定操作系统的。举个例子,假设您正在使用旧的DOS系统或其他东西,其中所有存在的都是控制台。除了停机之外,你不能真正关闭终端,因为那就是那里的全部。这个例子至少应该说明像C这样的语言不能保证这个功能。
答案 5 :(得分:-3)
那么,9Ake,你需要使用void main()而不是int main(void) 你需要调用getch();在main()内的程序结束时运行,并在程序的最顶部包含标题'conio.h'。