tailkill java.exe_Paramiko和exec_command - 杀死远程进程?

虽然不是最有效的方法,但这应该有效 . CTRL C之后;在KeyboardInterrupt处理程序中,你可以 exec_command("killall -u %s tail" % uname) 像这样:

#!/usr/bin/env python2

import paramiko

import select

import time

ltime = time.time()

# Or use random:

# import random

# ltime = random.randint(0, 500)

uname = "victorhooi"

client = paramiko.SSHClient()

client.load_system_host_keys()

client.connect('someserver', username=uname, password='blahblah')

transport = client.get_transport()

channel = transport.open_session()

channel.exec_command("tail -%df /home/victorhooi/macbeth.txt" % ltime)

while True:

try:

rl, wl, xl = select.select([channel],[],[],0.0)

if len(rl) > 0:

# Must be stdout

print channel.recv(1024)

except KeyboardInterrupt:

print("Caught control-C")

channel.close()

try:

# open new socket and kill the proc..

client.get_transport().open_session().exec_command("kill -9 `ps -fu %s | grep 'tail -%df /home/victorhooi/macbeth.txt' | grep -v grep | awk '{print $2}'`" % (uname, ltime))

except:

pass

client.close()

exit(0)

这会杀死任何名为 tail 的打开进程 . 这可能会导致问题,但如果你打开了 tail ,你不想关闭,如果是这样你可以 grep a ps ,得到pid和 kill -9 它 .

首先,设置tail以从文件末尾读取 n 行,然后再执行 . 将 n 设置为一个独特的nuber,如 time.time() ,因为尾部不关心该数字是否大于文件中的行数, time.time() 中的大数字不应该导致问题并且将是唯一的 . 然后grep为 ps 中的唯一编号:

client.get_transport().open_session().exec_command("kill -9 `ps -fu %s | grep 'tail -%df /home/victorhooi/macbeth.txt' | grep -v grep | awk '{print $2}'`" % (uname, ltime))

### 回答1: 这行代码使用了 Paramiko 库的 exec_command() 方法,将字符串 'ps -ef |grep {0}'.format(k) 作为参数传递给远程服务器。这条命令会在远程服务器上执行,获取当前正在运行的进程列表,并使用管道符将结果传递给 grep 命令,用于过滤指定的进程名称 k。最终,该命令会返回三个文件流对象:stdin、stdout 和 stderr。其中,stdout 对象包含了命令执行后的输出结果,可以通过调用 stdout.read() 方法来获取。stderr 对象包含了错误输出,通常用于调试程序。 ### 回答2: 这行代码是使用ssh_client执行远程命令,并且将命令的结果分配给三个变量stdin,stdout和stderr。 stdin是用于向远程shell发送输入的流。在这个特定的命令中,我们没有向远程shell发送任何输入,所以stdin可能为空。 stdout是包含远程命令输出的流。在这个命令中,它用来接收运行"ps -ef |grep {0}"命令的结果,其中{0}是一个占位符,将被变量k的值所替代。这个命令将会列出所有正在运行的进程,并且通过grep过滤出包含k值的进程。 stderr是包含远程shell发送的错误消息的流。如果有任何错误发生,它们将会被远程shell发送到stderr流中。 总结起来,这行代码通过ssh_client执行了一个远程命令,并将其输出和错误分配给stdout和stderr变量。 ### 回答3: 这段代码是使用Python中的paramiko库来通过SSH连接到远程主机,并执行了一个Linux命令"ps -ef |grep {0}",其中{0}是通过变量k的值进行动态替换的。 在这段代码中,stdin, stdout, stderr是SSH连接对象ssh_client的exec_command方法的返回值。这个方法用于执行远程主机上的命令,并返回命令的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。这样我们可以通过这三个对象来获取命令执行的输入、输出和错误信息。 在这段代码中,我们执行了一个"ps -ef |grep {0}"的命令,这个命令用于查找所有正在运行的进程,并通过grep命令来过滤包含变量k的行。这个命令会返回所有匹配的进程的信息。 通过ssh_client.exec_command方法返回的stdin对象可以用于向命令的输入流写入数据,stdout对象可以用于获取命令的输出结果,stderr对象可以用于获取命令的错误信息。 当我们调用ssh_client.exec_command方法后,可以通过这三个对象来获取命令的输入、输出和错误信息,比如可以使用stdout对象的readlines方法来读取命令的输出行,并进行进一步的处理和分析。这样我们就可以通过SSH连接远程主机,并执行命令并获取结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值