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

How to stop a process running in a shell in a different system?

本文关键字:shell 运行 进程 系统 何停止      更新时间:2023-10-16

好,所以我正在执行SBC6845中存在的程序./led.sh,从我的主机系统使用qt- c++程序。这个程序基本上把我的SBC连接到我的主机系统。它相当于"超级终端"(hyperterminal)或"迷你终端"(Minicom)。我得到了这个程序(示例代码)从http://code.google.com/p/qextserialport/.

下载"qextserialport-1.2rc.zip"

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

我宣布

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

然后在dialog.cpp中添加这个

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

void Dialog::someaction(){

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

我能够在我的SBC中做led闪光。

但是当我试图停止./lead .sh时,问题发生了,我无法在artassistant中这样做(bug,需要修改,仍然工作)。但目前我正试图使另一个pushbutton_1,并把一些像"Ctrl+Z"里面,并要求./lead .sh停止。我遇到了一些其他的链接,我无法把由于低声誉点。我不知道如何使用SIGTERM/kill选项[从其他链接]内qt应用程序和执行按钮点击。假设我使用kill,我将如何确定多个这样的按钮动作的pidof,并分配杀死谁。

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

我不知道如何使用SIGTERM/kill选项[从其他链接]在qt应用程序和执行按钮点击。

与这么多,Qt给你一个直观的抽象,让你不必担心任何这些,即QProcess。在您的情况下,您需要这样做:

QProcess proc;
proc.start("led.sh");
...
//handle Ctrl-Z event
proc.close();

这里的第一个答案有其他几种执行更复杂shell命令的技术。

我已经找到了一个临时的解决方案。我还没有尝试qprocess操作。

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

void someotheraction();

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

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

:

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

这里的第五个回复给了我这个想法。我不知道为什么,但它确实起作用了,也许有人能解释得更好。