From 6fae25b305d714b3ab7608fa003f1af9bf024545 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Tue, 14 Feb 2023 13:33:23 +0800 Subject: Rename tools into bin --- bin/unix/fdswap | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100755 bin/unix/fdswap (limited to 'bin/unix') diff --git a/bin/unix/fdswap b/bin/unix/fdswap new file mode 100755 index 0000000..251cdea --- /dev/null +++ b/bin/unix/fdswap @@ -0,0 +1,41 @@ +#!/bin/bash +# +# fdswap +# +# Orignal author: ingvarha +# ref: https://ingvarha.wordpress.com/2010/07/10/changing-a-process-file-descriptor-on-the-fly/ + +if [ "$2" = "" ]; then +</dev/null; then + echo "Unable to find gdb." + exit 1 +fi + +src="$1"; dst="$2"; shift; shift +pids=$* + +for pid in ${pids:=$( /sbin/fuser $src | cut -d ':' -f 2 )}; +do + echo "src=$src, dst=$dst" + echo "$src has $pid using it" + cmd=$(mktemp) + { + echo "attach $pid" + echo 'call (int)open("'$dst'", 66, 0666)' + for ufd in $(LANG=C ls -l /proc/$pid/fd | \ + grep "$src"\$ | awk ' { print $9; } '); + do echo 'call (int)dup2($1,'"$ufd"')'; done + echo 'call (int)close($1)' + echo 'detach'; echo 'quit' + sleep 5 + } | tee /dev/tty >$cmd + gdb -x $cmd +done -- cgit v1.2.3-70-g09d2