【问题标题】:IntelliJ - Running Program as SudoIntelliJ - 以 Sudo 运行程序
【发布时间】:2020-08-17 01:36:12
【问题描述】:

使用 Java 和 IntelliJ 在 OSX 上开发程序。处理网络套接字和 ICMP。因此,该程序需要在 OSX 上以 root 或 sudo 运行。程序在 sudo 下从 IntelliJ 外部的终端窗口运行良好。但是,我想从 IntelliJ (V9) 调试和运行它。在 IntelliJ 中出现错误(我需要 root 权限来枚举网络设备)。我知道如何在 IntelliJ 中传递程序和 VM 参数,但现在如何点击运行和/调试并让它在 sudo 下运行?需要的基本上是 sudo java ...... MyProgram 而不是 java ..... MyProgram 任何想法或解决方法。

【问题讨论】:

    标签: intellij-idea


    【解决方案1】:

    我想出了一个答案并想分享它以防万一其他人遇到这个问题。为了解决这个问题,我在做网络编程时从 QT 和 QT Creator 中得到了启发。

    在 OSX 上,我打开了一个终端窗口并 cd 到 /Applications/IntelliJ IDEA 9.0.3.app/Contents/MacOS。在那里你会找到一个名为 idea 的文件,它会启动 IDE。我将其作为 sudo (sudo ./idea) 运行。这照顾了 Intellij 启动的任何东西的权限,我可以根据需要调试和逐步执行我的代码。

    sudo /Applications/IntelliJ IDEA 9.0.3.app/Contents/MacOS/idea 
    

    由于这是一台开发机器,我可以控制它,在这种情况下安全不是问题。

    希望它可以帮助其他人。

    【讨论】:

    • 有什么办法可以确保 IntelliJ 总是这样打开?
    • 你写了什么shell脚本,里面有这一行:sudo "/Applications/IntelliJ IDEA 12.app/Contents/MacOS/idea" &。将脚本 CHMOD 到 755 并从那里运行 Intellij,而不是使用普通图标
    • 所以对我来说,它造成了问题,因为它没有以登录用户启动 intellij,所以我 cd'd 到 /Applications/IntelliJ IDEA 9.0.3.app/Contents/MacOS 并用登录用户运行想法脚本,我的问题得到了解决。现在我期待知道当我们从 Spotlight 搜索中打开任何应用程序时究竟会发生什么。无论如何,我花了 3-4 个小时来解决这个问题,这个解决方案帮助了我.. 给你兄弟一个大大的拥抱。非常感谢。
    • 在我的情况下,IntelliJ 是一个 snap 包,但解决方案是相同的:sudo /snap/bin/intellij-idea-community 我需要将一些文件存储到根拥有的文件夹中。效果很好。
    【解决方案2】:

    在终端内:

    sudo -s
    

    授予 root 用户访问权限。

    您可以从那里使用脚本运行 Idea IDE:

    /Applications/IntelliJ\ IDEA*/bin/idea.sh
    

    通过这种方式,我可以在之前打印权限错误的网络上工作。

    【讨论】:

    • /Applications/IntelliJ\ IDEA\ *.app/Contents/MacOS/idea
    • 谢谢,这是一个救生员。此外,出于某种原因,当想法像这样开始时,它会重新开始。这意味着所有以前的设置都消失了。 Wokraround 是从之前运行的实例中导出设置,将其保存为 settings.zip,然后从新启动的实例中导入。
    【解决方案3】:

    出于安全原因,操作系统不允许调试 sudo 程序,除非调试器以 root 身份运行。

    所以,即使你能弄清楚如何让 IntelliJ 使用 sudo,它也对你没有任何好处。

    【讨论】:

    • 我希望我能像在 C++ 和 Qt 中那样做一些类似的事情。我可以启动一个进程,然后将调试器附加到它。在 Qt Creator 中,我使用 sudo 启动 Qt Creator,以 myprogram 作为 sudo 的参数运行程序 sudo,从 Qt Creator 运行 myprogram,然后将 gdb 附加到正在运行的进程。然后我可以根据需要逐步完成它。在这种情况下没有这样的运气。正如你所说,我的调试器在 root 下运行,所以它可以工作。
    • 要清楚。他是对的,如果不在 sudo 中运行调试器,就无法调试以 sudo 启动的进程。但是,使用 sudo 运行 intellij 可以正常工作,风险在于“Sudo”中运行的版本生成的任何文件都将归“root”所有,如果您不总是使用 sudo 或 root 用户编写您的代码(您可能不应该这样做)。您应该启动一个 gdbserver 并将其附加到进程:sudo gdbserver localhost:<SOME PORT> --attach <PID HERE> 该命令可能有点错误,但它应该让人们到达那里。
    • 您的回答对我有帮助,但我不明白原因。我正在使用 Sudo 运行 IntelliJ,也使用 sudo 运行 Visualvm。当我使用 IntelliJ 调试代码时,它无法与 mem profiler (visualvm) 建立连接。我无法创建套接字错误。但是现在,我正在运行程序(即不在调试模式下),visualvm 和我的代码之间已经建立了连接。
    • 你能帮我理解一下原因,为什么会发生这种情况,我该如何解决这个问题。 P.s:您在上面突出显示的问题“运行版本将由 sudo 拥有”我们在这里遇到了这个问题。如果不使用 sudo 运行 intellij,我就无法运行我的代码
    【解决方案4】:

    我知道这不是 OP 直接要求的 - 如果有人需要在 Linux (Ubuntu) 上执行此操作,例如为了更新 Idea,只需从命令行运行:

    sudo /usr/local/bin/idea
    

    只有在更新和重启完成后才能真正关闭 Idea 并正常启动它

    【讨论】:

      【解决方案5】:

      我同意@Darron,不建议使用 sudo 执行 IntelliJ。 您可以改为使用 IntelliJ 终端执行。 我在 IntelliJ 中维护我的项目。当我需要执行需要 sudo 访问的单元测试时,我只需打开 IntelliJ 终端并输入:

      sudo gradle test
      

      祝你好运!

      【讨论】:

      • >不建议使用 sudo 执行 IntelliJ。没有真正的理由不应该授予他机器上的开发人员以 root 用户身份运行 IDE/调试器的权限。
      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      相关资源
      最近更新 更多