首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关闭在该终端中启动的应用程序中的终端

关闭在该终端中启动的应用程序中的终端
EN

Unix & Linux用户
提问于 2016-10-28 16:50:17
回答 1查看 184关注 0票数 0

在工作中,我们有一台超级计算机可以通过SSH访问。

我们登录,使用带有参数的bsub命令保留核心,后者创建(从doc)“与伪终端交互的bash会话”。

在这个“伪终端”中,我们转到一个文件夹,用参数启动求解器,然后让它运行到完成。

所以应用程序完成了,会话保持开放,保留的核心保持保留,然后几天后(如果sim在工作结束后周五完成),IT在周一发送一封电子邮件,声明内核是保留的,但是他们没有看到任何活动,等等。

我已经检查了https://stackoverflow.com/questions/14254118/waiting-for-background-processes-to-finish-before-exiting-script巴什--如何在前面的命令完成后运行命令?以及其他论坛/教程,但我发现的只是如何在关闭终端后保持应用程序的运行(将应用程序与终端分离)。

我需要相反的,我想关闭终端(这可能是解算器的最后一步,这样它就可以退出终端并被杀死)。

我愿意接受建议,我可以在脚本中这样做,或者我可以让这个家伙在他的C++解决程序中编写代码。

我尝试了以下方法(在运行在VM中的Ubuntu上,希望它在任何bash环境中都能或多或少地工作,如果我错了,请纠正我):

delay_test.c:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>

int main(int argc, const char *argv[])
{
    printf("Doing some fake lengthy operation...");
    sleep(15); // sleep for 15 seconds
    return 0;
}

按预期编译和运行。在返回之前,我尝试了system("clear"); (stdlib.h的一部分),这也有效,我收到了消息,15秒后屏幕被清除,应用程序退出。

然后我尝试了system("exit");,什么也没有发生(我的意思是应用程序退出,就好像exit语句不在那里一样)。我的最佳猜测是,应用程序必须返回才能退出终端,但这只是猜测而已。

我还尝试了一种脚本方式:

test.sh:

代码语言:javascript
复制
#!/bin/bash
./delay_test &
wait
exit

在这种情况下,我的理解告诉我,exit语句将完成脚本,但是,一旦该应用程序终止,我需要退出终端会话。

那么,在应用程序退出之后,我能做些什么来迫使“伪终端”退出呢?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-10-28 17:40:08

bsub命令提供的shell中最简单的方法是在要使用exec运行的任何命令前加上前缀,这是一个内置的shell,它将用您的解决程序替换提供的shell:

代码语言:javascript
复制
exec yoursolver

yoursolver退出时,它将返回到bsub,因为该外壳早已被求解程序所取代。

(顺便说一句,有些语言( TCL,PHP)的exec与shell或Perl exec或C exec(3)函数完全不同,所以如果您正在使用或熟悉这些语言,请注意这种差异;TCL和PHP版本更类似于C system(3)或Perl system函数,或者将命令键入shell,因为最初的进程还在后面。)

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/319586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档