В общем случае это невозможно, так как:
Each command in a pipeline is executed in its own subshell
(из руководства bash).
Если команда отправки задерживается достаточно долго, есть шанс, что вы сможете ее найти. Ниже приведен пример сценария «получатель»; он берет столбец NODE из lsof
, который соответствует стандартному вводу получателя, затем ищет в более широком выводе lsof
процесс, чей стандартный вывод NODE соответствует:
#!/bin/sh
# look for f0 and get its node
node=$(lsof -p "$$" -Ffi | awk '/^p/ { node=""; } /^f0$/ { getline; node=substr($0, 2); exit; } END { print node }')
# run lsof and get the pid(s) with f1 whose node match $node
lsof -Ffci | awk -v node="$node" '
/^c/ { procname=substr($0, 2); }
/^f1$/ { getline; thisnode=substr($0, 2); }
/^p/ { if (procname != "" && thisnode == node) { print procname; procname=""; thisnode=""; } }
END { if (procname != ""&& thisnode == node) print procname; }
'
cat