limitの結果は
---
cputime unlimited
filesize unlimited
datasize 524288 kbytes
stacksize 65536 kbytes
coredumpsize unlimited
memoryuse unlimited
vmemoryuse unlimited
descriptors 39146
memorylocked unlimited
maxproc 19573
sbsize unlimited
---

openで止まっているのは分かったので
open(FILE,"/usr/local/bin/hoge $_|)||return -1;
を
print LOG "opening $thread_id\n";
open(FILE,"/usr/local/bin/hoge.sh $_|)||return -1;

hoge.sh
#!/bin/sh
echo $@ >>/tmp/log
exec /usr/local/bin/hoge $@

と変更し無限ループに見える状況が発生すると、perl側のlogにはopen直前まで来た記録が在りますが、hoge.sh側のlogには記録がありませんので、open文の中身が実行されてないように見えます。
perl側でshellを起動したあとに固まっているのか、shellを起動しようとして固まっているのか、
どうやって調べましょう????