我的代码:
#include <cstdlib>
#include <time.h>
#include <unistd.h>
using namespace std;
int main()
{
system("clamscan -r --log=clamavlog.txt --infected --bell /home/secon/Downloads");
sleep(1);
system("exit");
}
问题是我的程序进行了扫描,但终端保持打开状态,我使用终端编译并运行我的程序:gcc auto.cpp -o auto.exe
编译,然后./auto.exe
运行。我尝试使用,system("exit")
但它不起作用。PS 抱歉我的英语不好。
答案1
虽然您无法让编译后的应用程序关闭正在运行的终端窗口,但通过改变执行程序的方式可以轻松实现这一点。
例如,如果您的可执行应用程序可以使用启动./myprogramm
,那么您只需在终端中键入以下命令即可首先运行myprogramm
,并在完成后立即运行该exit
命令以关闭 shell 以及整个终端窗口:
./myprogramm ; exit
或者,也许更好的方法是,仅在应用程序成功退出且没有任何错误(由 0 以外的退出状态代码表示)时才关闭终端窗口。只有当第一个命令成功时,您才可以使用&&
而不是;
来运行第二个命令:
./myprogramm && exit
第三种选择是将终端窗口中运行的 shell 替换为您的应用程序,而不是在 shell 内运行应用程序。这样,应用程序退出后终端窗口就会关闭,您不必再退出 shell:
exec ./myprogramm
前两种方法(; exit
和&& exit
)与最后一种使用方法之间的一个很大的区别exec
是,在第一种情况下,您可以通过按Ctrl+来终止您运行的命令C,然后您将返回到 shell,窗口将保持打开状态。如果您使用exec
,这也会终止您的应用程序,但由于不再有在其中运行它的 shell,因此终端窗口也会立即关闭。