【问题标题】:Getting PID With C++ shell()?使用 C++ shell() 获取 PID?
【发布时间】:2017-02-17 20:09:19
【问题描述】:

我正在开发一个 C++ 游戏,我想在一开始就播放音乐。到目前为止,这是我的代码示例:

int main() {
    // Gets user's name
    system("clear");
    system("afplay ~/music.mp3 &>/dev/null &");
    string name;
    cout << "###################\n";
    cout << "# Enter your name #\n";
    cout << "###################\n";
    cin >> name;

    // Greets user
    system("clear");
    cout << "So, your name is " << name << "?\n";
    system("sleep 1.5");
    cout << "Greetings, and welcome to the world of NULL!\n\n";
    system("kill $!");

    return 0;
}

但是,kill $! 不是killing,也不是停止afplay 音乐。我认为这是因为system("afplay ~/music.mp3 &amp;&gt;/dev/null &amp;"); 没有将PID 输出到$!

我怎样才能killafplay 或至少获得它的 PID 以便我可以kill 它?

我使用的是 Mac,而且我是 C++ 新手...

警告:这是一种不好的做法;它可能会杀死重要进程并杀死所有进程,因此它可能会停止用户正在使用的任务!

【问题讨论】:

  • 您确定在应用程序中调用一个单独的进程来播放音乐是个好主意吗? :)
  • 为什么不呢?
  • @KeeganKuhn 好吧,一方面,如果有人的系统有一个名为“afplay”的程序可以关闭他们的核反应堆怎么办?您不应该将system 用于您的程序可以自己做的任何事情,并且在您对C++ 非常有经验之前,您可能根本不应该使用system
  • 嗯,这很奇怪……“afplay”是 OSX 自带的,代表“音频文件播放”。
  • @KeeganKuhn OSX 以外的操作系统。谁知道下一个 OSX 版本将包含或不包含什么。您正在做的事情刚刚发生,因此您认为它们是安全的。这不是一个好习惯,如果你还在学习 C++,你应该坚持安全的习惯,直到你有更多的经验。否则,你可能永远学不会。

标签: c++ macos audio pid kill


【解决方案1】:

Apple 的手册页说你可以打电话

killall afplay

http://osxdaily.com/2010/12/07/command-line-mp3-player-in-mac-os-x/

【讨论】:

  • 请注意,这将杀死系统上所有名为afplay的进程(运行该程序的用户有权杀死)。所以现在你已经强加了一条规则,任何使用你的程序的人都不能将任何关键程序命名为afplay,否则当他们运行你的程序时它将被终止。这是非常非常糟糕的做法。
  • 那么你有什么建议用 C++ 播放音频文件呢?
  • @KeeganKuhn 如果你想问一个新问题,你需要问一个新问题here
猜你喜欢
  • 2023-04-06
  • 2018-02-05
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-10-05
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多