2017-02-17 6 views
-1

Я работаю над игрой на C++, в которой я хочу играть музыку в начале. Это пример моего кода до сих пор:Получение PID с C++ shell()?

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 $! не kill, или расположение остановки afplay музыки. Я думаю, это потому, что system("afplay ~/music.mp3 &>/dev/null &"); не выводит PID в $!.

Как я могу killafplay или хотя бы получить его ПИД-код, чтобы я мог kill?

Я на Mac, и я новичок в C++ ...

ВНИМАНИЕ: Это плохая практика; он может убить важные процессы и убить всех, поэтому он может остановить задачи, которые использовал пользователь! страничное руководство

+0

Вы уверены, что называют отдельный процесс для воспроизведения музыки в приложении является хорошей идеей? :) – Zefick

+0

Почему бы и нет? – keeganjk

+0

@ KeeganKuhn хорошо, во-первых, что, если у кого-то есть система, в которой есть программа под названием «afplay», которая закрывает свой ядерный реактор? Вы не должны использовать 'system' для чего-либо, что ваша программа может сделать сама, и пока вы не приобретете опыт работы с C++, вы, вероятно, не должны использовать' system' вообще. –

ответ

0

компании Apple говорит, что вы можете просто позвонить

killall afplay 

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

+0

Обратите внимание, что это уничтожит все процессы с именем 'afplay' в системе (чтобы пользователь, запускающий программу, имел разрешение убить). Итак, теперь вы наложили правило, согласно которому никто, кто использует вашу программу, не может назвать какую-либо критическую программу 'afplay', иначе она будет прекращена при запуске вашей программы. Это действительно очень плохая практика. –

+0

Что вы предлагаете для воспроизведения аудиофайла на C++? – keeganjk

+0

@KeeganKuhn Если вы хотите задать новый вопрос, вам нужно задать новый вопрос [здесь] (http://stackoverflow.com/questions/ask). –

Смежные вопросы