java - 在 Process Builder 中切换用户

标签 java linux processbuilder

我想切换用户,然后在新用户下启动命令。 其实我的代码是

String[] commandToRun2 = {"su","-","jboss", "./jboss-cli.sh -c :shutdown(restart=true)"};
ProcessBuilder pb = new ProcessBuilder(commandToRun2);
pb.directory(new File("/home/jboss/soft/jboss-as-7.1.1.Final/bin/"));
Process p = pb.start();

但我无法让它工作。

最佳答案

根据 this SuperUser answer ,您对 su 的调用似乎不太正确。

从那个问题来看,su 命令应该有这样的形式

su [username] -c "[command]"

因此,请尝试以下操作:

String[] commandToRun2 = {"su", "jboss", "-c", "./jboss-cli.sh -c :shutdown(restart=true)"};

顺便说一句,记录写入进程标准输出和标准错误的任何输出可能会有所帮助。如果出现错误,您将能够看到错误是什么,如果进程生成大量输出,读取输出将防止输出缓冲区被填满并阻止进程。 This answer演示如何执行此操作。

关于java - 在 Process Builder 中切换用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34276639/

相关文章:

java - Dijkstra 算法 : Printing whole path in console works fine, 无法将其转换为正确的字符串

java - Greenfoot - isKeyDown() 似乎保持其值(value)

java - 使用 processbuilder 从 java 执行 curl

java - ProcessBuilder:启动java包中的.jar

java - 如何使用 Java 运行存储在 String 变量中的 shell 脚本?

java - checkstyle getSQLTypeName

java - JMX混淆(远程服务器控制)

linux - 非阻塞套接字客户端连接

linux - 停止或重新加载后 Vagrant 错误 "Failed to mount folders in Linux guest"

linux - airmon-ng找不到任何接口(interface)