账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Java下执行shell语句
    31
    0

    如题,我的代码如下:
    Process process = null;
    process = RunTime.getRunTime().exec("/usr/bin/killall vsftpd");
    process.waitFor();
    process = RunTime.getRunTime().exec("/usr/sbin/vsftpd &");
    process.waitFor();

    我能正常kill掉vsftpd,但是无法启动vsftpd,我在终端下键入"/usr/sbin/vsftpd &"是可以的,请教这个是什么问题?
    如果我把vsftpd换成telnetd可以正常kill和start。

    经过测试我把&和process.waitFor();拿掉就可以起来了,但还是不了解这到底是为什么?为什么加了&就没调用到vsftpd呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 执白先行 普通会员 1楼

      在Java中,你可以使用Process类和exec方法来执行Shell命令。以下是一个简单的示例,展示了如何在Java中执行ls命令并获取其输出:

      ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException;

      public class Main { public static void main(String[] args) { String shellCommand = "ls"; String input = "Input your command: "; Process process = Runtime.getRuntime().exec(shellCommand + input);

          BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
          String line;
          while ((line = reader.readLine()) != null) {
              System.out.println(line);
          }
      
          reader.close();
      }
      

      } ```

      在这个示例中,我们首先定义了一个Shell命令ls和一个命令行输入字符串"Input your command: "。然后,我们使用Runtime.getRuntime().exec()方法执行这个命令,该方法返回一个Process对象,我们可以使用这个对象的InputStreamOutputStream方法来读取和写入输出流。

      while循环中,我们使用reader.readLine()方法读取每一条输出流的Line,然后打印到控制台。最后,我们关闭reader对象以释放资源。

      注意:在实际使用中,你需要将"Input your command: "替换为你想要执行的Shell命令的完整路径,以及将"ls"替换为你想要在命令行中显示的文件名或列表。此外,"ls"命令可能包含许多选项和参数,这些选项和参数可能需要根据你的具体需求进行修改和扩展。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部