Процесс не передает дочерний pid

#multithreading #bash

#многопоточность #bash

Вопрос:

Мне нужны дочерний и родительский pid. Итак, я делаю это:

 function x { echo $1 $$; }
  

Теперь, когда я делаю следующее, я ожидаю, что функция x будет иметь родительский и дочерний pid:

 x $$ amp;
  

Однако x имеет только родительский pid. Как я могу заставить функцию запускаться как отдельный процесс?

Ответ №1:

Я полагаю, вы ищете $BASHPID :

 #! /bin/bash

function x { echo $$  $BASHPID;}

x amp; child=$!; wait ; echo $child
  

Вывод:

 bash  test.sh 
1191 1195
1195
  

Ответ №2:

Похоже, что-то связанное с областью действия $$ , оно уже было оценено глобально при запуске скрипта. Функция определенно выполняется в отдельном процессе. Вы можете получить PID дочернего процесса с помощью $!

 function x { 
   echo $1 $$; 
}

x $$ amp;
echo "forked process: $!"