我想在我的机器上运行一个用 C
编写的程序,并让它通过 SSH 连接到另一台机器以终止在它上面运行的程序。
在我的程序中,我尝试过:
system("ssh username@machine.com && pkill sleep && exit");
这将使我的终端通过 SSH 连接到远程机器,但到此为止。我也试过:
execl("ssh","ssh","username@machine.com",NULL);
execl("pkill","pkill","sleep",NULL);
execl("exit","exit",NULL);
但它不会终止我正在运行的虚拟 sleep
进程。
我似乎无法弄清楚我的流程出了什么问题。
最佳答案
您的第二个示例不会执行您想要的操作,因为它将在本地计算机上执行每个 execl
。 IE 它将
- 执行
ssh usrname@machine.com
- 执行
pkill
- 执行
退出
但是,实际上,除非你用 fork
包围它们,否则第一个 execl
如果成功运行,将替换当前进程,这意味着第二个和第三个那些永远不会被调用。
那么,让我们弄清楚为什么第一个(更有希望的)示例不起作用。
这应该相当于:
/bin/sh -c 'ssh username@machine.com && pkill sleep && exit'
&& exit
是多余的。并且您希望 pkill
在远程计算机上运行。因此,您需要做的事情:
/bin/sh -c 'ssh username@machine.com pkill sleep'
(注意缺少 &&
,所以 pkill
在远程机器上运行)。
这意味着你想要:
system("ssh username@machine.com pkill sleep");
如果这不起作用,请检查上面以 /bin/sh -c
开头的命令是否有效。例如,ssh
是否要求输入密码?如果是这样,它将不起作用。您将需要使用公钥。
关于C: 如何通过 SSH 杀死另一台机器上的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29067752/