后台执行aa.sh,即使关闭shell窗口也能正常执行
时间: 2023-01-11 07:55:36 浏览: 88
您可以使用 "nohup" 命令来实现这个目的。
例如:
nohup ./aa.sh &
这样就可以在关闭 shell 窗口后,后台执行 "aa.sh" 脚本了。
注意:
- "&" 符号表示在后台执行。
- "nohup" 命令会忽略所有的 SIGHUP 信号,这样就可以在关闭 shell 窗口后继续执行脚本了。
- "nohup" 的输出默认会保存在当前目录下的 "nohup.out" 文件中,如果希望将输出保存到其他文件中,可以使用 "nohup command > myout.file 2>&1" 这样的格式。
相关问题
osg在关闭窗口时重启一次线程后再执行关闭代码
在关闭窗口时重启一次线程后再执行关闭代码,可以通过OSG的回调函数来实现。具体来说,可以使用osgViewer::Viewer::addEventHandler()函数添加一个osgGA::GUIEventHandler,然后通过该事件处理器的回调函数来控制线程的重启和关闭。
以下是一个示例代码,演示如何在关闭窗口时重启一次线程后再执行关闭代码:
```
#include <osgViewer/Viewer>
#include <osgDB/ReadFile>
#include <osgGA/GUIEventHandler>
class EventHandler : public osgGA::GUIEventHandler
{
public:
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
if(ea.getEventType() == osgGA::GUIEventAdapter::CLOSE_WINDOW)
{
// 重启一次线程
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
if(viewer)
{
viewer->setDone(false);
viewer->startThreading();
}
// 执行关闭代码
// ...
return true;
}
return false;
}
};
int main()
{
// 创建Viewer
osgViewer::Viewer viewer;
// 加载场景数据
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cow.osg");
// 设置场景数据
viewer.setSceneData(loadedModel);
// 添加事件处理器
viewer.addEventHandler(new EventHandler());
// 开始渲染
viewer.realize();
// 进入主循环
while(!viewer.done())
{
// 更新场景
viewer.frame();
}
// 关闭线程
viewer.stopThreading();
// 退出程序
return 0;
}
```
在这个示例代码中,我们创建了一个EventHandler类作为事件处理器,并且重写了handle()函数。当收到CLOSE_WINDOW事件时,我们首先重启了一次线程,然后执行了关闭代码。重启线程和关闭代码的具体实现可以根据项目的需求进行调整。最后,我们通过viewer.stopThreading()来关闭线程,确保程序正确退出。
gcc -o aa.c aa.x -lm什么意思
这个命令中有一些错误。正确的命令应该是:
```
gcc -o aa aa.c -lm
```
这个命令的含义是:使用gcc编译器将aa.c源文件编译成可执行文件aa,并链接数学库libm。具体来说:
- "-o aa" 指定输出文件名为aa。这意味着,编译器将会生成一个可执行文件aa,而不是默认的输出文件a.out。
- "aa.c" 是源代码文件的名称,它包含要编译的C语言源代码。
- "-lm" 指定链接数学库libm。这是因为程序中可能会使用一些数学函数,例如sin、cos、sqrt等,这些函数定义在数学库中。因此,需要使用"-lm"来将数学库链接到可执行文件中。
需要注意的是,如果aa.c中没有使用数学库中的函数,那么就不需要使用"-lm"选项。此外,如果aa.c中使用了其他的库函数,那么也需要将相应的库链接到可执行文件中。