通过Java的Runtime.getRuntime().exec()方法调用本地命令时:
Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", "sudo nmap -sU -p 53 8.8.8.8"});
在控制台下测试上面代码没有任何问题,当程序在后台执行时就不能正常运行,当时非常困惑;然后通过java.lang.Process的getErrorStream方法获取到错误信息:
sudo: sorry, you must have a tty to run sudo
通过google后很快就定位到问题了,因为在配置文件/etc/sudoers设置了requiretty选项后,执行sudo需要一个终端;然后使用vim修改配置文件或直接执行visudo命令编辑配置文件:
# # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". # # Defaults requiretty # 将此行注释掉
然后重新执行程序,问题解决;
扫描二维码关注公众号,回复:
1140348 查看本文章