| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 
 | private boolean doFence(Session session, InetSocketAddress serviceAddr)throws JSchException {
 int port = serviceAddr.getPort();
 try {
 //这段日志已经出现,所以忽略
 LOG.info("Looking for process running on port " + port);
 int rc = execCommand(session,
 "PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp " + port);
 //这段日志没出现,所以代表执行该命令返回值为rc == 1
 if (rc == 0) {
 LOG.info("Successfully killed process that was " +
 "listening on port " + port);
 // exit code 0 indicates the process was successfully killed.
 return true;
 } else if (rc == 1) {
 // exit code 1 indicates either that the process was not running
 // or that fuser didn't have root privileges in order to find it
 // (eg running as a different user)
 LOG.info(
 "Indeterminate response from trying to kill service. " +
 "Verifying whether it is running using nc...");
 //然后通过这个命令去检查端口是否还在的时候,报错了,返回2,并不是执行返回1,而是执行方法有误
 rc = execCommand(session, "nc -z " + serviceAddr.getHostName() +
 " " + serviceAddr.getPort());
 if (rc == 0) {
 // the service is still listening - we are unable to fence
 LOG.warn("Unable to fence - it is running but we cannot kill it");
 return false;
 } else {
 LOG.info("Verified that the service is down.");
 return true;
 }
 } else {
 // other
 }
 LOG.info("rc: " + rc);
 return rc == 0;
 } catch (InterruptedException e) {
 LOG.warn("Interrupted while trying to fence via ssh", e);
 return false;
 } catch (IOException e) {
 LOG.warn("Unknown failure while trying to fence via ssh", e);
 return false;
 }
 }
 
 |