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

C++ 如何停止在不同系统中的shell中运行的进程?,c++,qt,shell,C++,Qt,Shell,好的,我正在使用qt-C++程序从主机系统执行SBC6845中的程序./led.sh。该程序基本上将SBC连接到主机系统。它相当于“超级终端”或“迷你通信”。我从“qextserialport-1.2rc.zip”中获得了这个程序(示例代码)“uartasistant” 在搜索如何从qt程序内部执行shell命令时,我遇到了以下链接:。我尝试并成功地执行了。/led.sh。感谢链接 我宣布 void someaction();//在对话框中.h 然后在dialog.cpp中我添加了这个 连接(u

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

在搜索如何从qt程序内部执行shell命令时,我遇到了以下链接:。我尝试并成功地执行了。/led.sh。感谢链接

我宣布

void someaction();//在对话框中.h

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

连接(ui->按钮,信号(点击()),插槽(someaction())

还有这个

void Dialog::someaction()
{

QString command=“sh./led.sh\r\n”const char*command2;

command2=command.toLocal8Bit().data();
端口->写入(command2);

我能在我的SBC里做LED闪光灯

但是当我尝试停止时出现问题。/led.sh,我无法在UARTASistant中执行此操作(错误,需要修改,仍在工作)。 但目前我正在尝试制作另一个按钮_1,并将类似于“Ctrl+Z”的内容放入其中,然后要求./led.sh停止。 我遇到了一些其他的链接,我无法把由于低信誉点。 我不知道如何在qt应用程序中使用SIGTERM/kill选项[从其他链接]并在按下按钮时执行。 比如说,如果我使用kill,我将如何确定多个按钮动作的pidof,并指定要杀死的人

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

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

与这么多内容一样,Qt为您提供了一个直观的抽象,让您不必担心任何这些,即。在您的情况下,您可能需要以下内容:

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

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

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

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

在dialog.h中,我添加了另一个函数:

void someotheraction();

然后在dialog.cpp中,我执行了以下操作:

connect(用户界面->按钮2,信号(点击()),插槽(someotheraction());

这是:

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

第五个回复给了我这个想法。我不知道怎么做的,但它起到了作用,也许有人能更好地解释它。

这里似乎有两个问题:如何发送
Ctrl-Z
(假设有效)以及如何从按钮触发。要分离这两个问题,请创建一个发送Ctrl-Z的函数。这就是我想做的。如果我知道Ctrl-Z的等价物是什么(我猜是kill?),我可以将它放在函数中并从按钮调用它。谢谢,我也将尝试此选项。