Java Runtime呼び出しローカルコマンドエラー:sudo:sorry,you must have a tty to run sudo

1306 ワード

JavaのRuntime.getRuntime().exec()メソッドでローカルコマンドを呼び出す場合:
 
 Runtime.getRuntime().exec(new String[] {"/bin/bash", "-c", "sudo nmap -sU -p 53 8.8.8.8"});

     
    コンソールの下で上のコードをテストしても問題はありません.プログラムがバックグラウンドで実行されると正常に動作しません.その時、とても困惑していました.そしてjavalang.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    #        

   
    その後、プログラムを再実行し、問題を解決します.