如何阻止在不同系统的shell中运行的进程?

时间:2013-04-02 14:15:26

标签: c++ qt shell

好的,我正在使用qt-C ++程序从我的主机系统执行我的SBC6845中的程序 ./led.sh 。该程序基本上将我的SBC连接到我的主机系统。它相当于“超级终端”或“Minicom”。我在http://code.google.com/p/qextserialport/的“qextserialport-1.2rc.zip”中获得了这个程序(示例代码)“uartassistant”。

我遇到了这个链接:Running shell command in QT c++ in ubuntu,同时搜索如何从qt程序中执行shell命令。我尝试并成功执行 ./led.sh 。感谢这个链接。

我宣布了

  

void someaction(); // in the dialog.h

然后在dialog.cpp中我添加了这个

  

connect(ui->pushButton, SIGNAL(clicked()), SLOT(someaction()));

和这个

  

void Dialog::someaction()   {

     
    

QString command = "sh ./led.sh\r\n"; const char* command2;
      command2 = command.toLocal8Bit().data();       port->write(command2);

  

我能够在我的SBC中执行ledflash。

但是当我尝试停止 ./led.sh 时出现问题,我无法在uartassistant中执行此操作(错误,需要修改,仍在工作)。 但暂时我正在尝试制作另一个按钮_1并在其中放入“Ctrl + Z”之类的内容并要求 ./ led.sh 停止。 我遇到了一些其他链接,由于信誉度低,我无法提出这些链接。 我不知道如何在qt app中使用SIGTERM / kill选项[来自其他链接]并按下按钮执行。 假如我使用 kill 我如何确定多个此类按钮操作的 pidof 并指定要杀死的人。

另外我想补充说我的SBC有灰[Almquist shell]。所以它是Bourne shell的低内存克隆,我不知道它是否支持退出 led.sh 的正常命令。

2 个答案:

答案 0 :(得分:1)

  

我不知道如何使用SIGTERM / kill选项[来自其他链接]   在qt app中,按下按钮执行。

与此同样,Qt为您提供了直观的抽象,让您不必担心任何这一点,即QProcess。在你的情况下,你想要这样的东西:

QProcess proc;
proc.start("led.sh");
...

//handle Ctrl-Z event
proc.close();

第一个答案here有几种其他技术可用于执行更复杂的shell命令。

答案 1 :(得分:0)

我找到了解决问题的临时解决方案。我还没有尝试 qprocess 操作。

在dialog.h中我添加了另一个功能:

  

void someotheraction();

然后在dialog.cpp中我这样做了:

  

connect(ui->pushButton_2,SIGNAL(clicked()), SLOT(someotheraction()));

和此:

void Dialog::someotheraction()
{
  QString command = "\x001a \r\n"; const char* command2; // Ctrl-Z = \x001a
  command2 = command.toLocal8Bit().data();
  port->write(command2);}

第五个回复here给了我这个想法。我不知道怎么做,但它确实做了一些人可以更好地解释它。