2017-02-17 2 views
-1

Je travaille sur un jeu C++, dont je veux jouer de la musique au début. Ceci est un exemple de mon code à ce jour:Obtention d'un PID avec shell 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; 
} 

Cependant, la kill $! n'est pas kill ment, ou arrêter la musique afplay. Je pense que c'est parce que le system("afplay ~/music.mp3 &>/dev/null &"); ne sort pas le PID en $!. Comment puis-je killafplay ou au moins obtenir son PID afin que je puisse kill?

Je suis sur un Mac et je suis nouveau C++ ...

AVERTISSEMENT: Ceci est une mauvaise pratique; il pourrait tuer des processus importants et tuer tout le monde, il peut donc arrêter les tâches que l'utilisateur utilisait!

+0

Etes-vous sûr appeler un processus distinct pour la musique de jeu dans l'application est une bonne idée? :) – Zefick

+0

Pourquoi ce ne serait pas? – keeganjk

+0

@KeeganKuhn Eh bien, d'abord, que se passe-t-il si quelqu'un a un système qui a un programme appelé "afplay" qui arrête son réacteur nucléaire? Vous ne devriez pas utiliser 'system' pour tout ce que votre programme peut faire lui-même et jusqu'à ce que vous soyez très expérimenté avec C++, vous ne devriez probablement pas utiliser' system'. –

Répondre

0

page de manuel d'Apple dit que vous pouvez appeler simplement

killall afplay 

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

+0

Notez que cela va tuer tous les processus nommés 'afplay' sur le système (que l'utilisateur qui exécute le programme a l'autorisation de tuer). Alors maintenant vous avez imposé une règle selon laquelle personne qui utilise votre programme ne peut nommer un programme critique 'afplay' ou il sera arrêté quand il lancera votre programme. C'est vraiment, vraiment une mauvaise pratique. –

+0

Que suggérez-vous pour lire un fichier audio en C++, alors? – keeganjk

+0

@KeeganKuhn Si vous voulez poser une nouvelle question, vous devez poser une nouvelle question [ici] (http://stackoverflow.com/questions/ask). –