Вы хотите найти примеры того, как работает fork / exec / kill.
обычно вы форкаете процесс, который создает два процесса: дочерний и родительский.Дочерний возвращается из «fork» с кодом возврата 0. Родительский процесс возвращает pid child - вот как вы узнаете, являетесь ли вы дочерним или родительским.
Теперь, если вы хотите выполнить какую-то другую программу,может вызвать 'exec' из дочернего процесса.Однако у вас может быть такой код:
pid = fork();
if (pid == 0)
{
// do child stuff here
exit (0);
}
if (pid == -1)
// failed to fork, deal with it
// parent code goes here
...
...
kill(pid, SIGKILL); // you can kill your child process here if you want to.
// thanks to Adam Rosenfield for pointing out the signal number has to be sent
Это просто, если вы посмотрите учебник по нему.Windows работает по-другому, поэтому, если вы хотите перенести свой код в windows, используйте как fork, так и exec, поскольку windows фактически не создает идентичную копию программы - она фактически всегда порождает новую программу.
Я считаю,Не цитируйте меня, поскольку Windows-программисты, как правило, используют потоки чаще, чем Unix-программисты, поскольку создание нового процесса в Windows - большая проблема.На Unix это не так важно, но это больше, чем поток.Но программирование потоков намного сложнее, в сравнении, вы, вероятно, захотите держаться от него подальше, если вам это действительно не нужно.
edit: перед выполнением 'kill (pid, SIGKILL)' вы действительно хотите сделатьуверен, что ваш ребенок еще жив.Если ваш ребенок умер, pid мог бы быть повторно использован другим процессом, и в этом случае вы можете завершить какой-то случайный процесс.
edit2: в вашем коде есть ошибка.
1 - remove 'int id...'
2 - move pid_t childpid; from function into global scope
3 - kill childpid, not 'id'