C: 如何通过 SSH 杀死另一台机器上的进程?

标签 c ssh

我想在我的机器上运行一个用 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/

相关文章:

c - Clang 5.0 上的 vsprintf 和 vsnprintf [-Wformat-nonliteral] 警告

无法让 OpenGL 3.3 绘制三角形,不会抛出任何错误

python 3 paramiko ssh代理在第三台主机上使用远程命令转发跳转主机

python - 无法使用 Paramiko 远程执行 tcpdump

selenium - 从命令行安装.safariextz

linux - 无法通过 SSH 在 heredoc 或命令中使用本地和远程变量

c - ld 在链接动态共享库时做什么?

c - Realloc 在目录/文件名的递归存储期间咀嚼字符串数组

C : x to the power n using repeated squaring without recursive function

docker-compose gitlab 使用 Nginx 但 ssh 失败