sysdig
может отслеживать их с помощью ] evt.type = kill
filter:
# terminal uno
perl -E 'warn "$$\n"; $SIG{INT}= sub { die "aaaaargh" }; sleep 999'
# terminal dos
sysdig -p '%proc.pname[%proc.ppid]: %proc.name -> %evt.type(%evt.args)' evt.type=kill
# terminal tres
kill -INT 11943 # or whatever
Может потребоваться более конкретный фильтр, чтобы избежать, например systemd
спам из-за засорения вывода sysdig
или grep
для имен процессов или идентификаторов:
# sysdig -p '%proc.pname[%proc.ppid]: %proc.name -> %evt.type(%evt.args)' evt.type=kill
systemd[1]: systemd-udevd -> kill(pid=11969(systemd-udevd) sig=15(SIGTERM) )
systemd[1]: systemd-udevd -> kill(res=0 )
systemd[1]: systemd-udevd -> kill(pid=11970(systemd-udevd) sig=15(SIGTERM) )
systemd[1]: systemd-udevd -> kill(res=0 )
systemd[1]: systemd-udevd -> kill(pid=11971(systemd-udevd) sig=15(SIGTERM) )
systemd[1]: systemd-udevd -> kill(res=0 )
sshd[11945]: bash -> kill(pid=11943(perl) sig=2(SIGINT) )
sshd[11945]: bash -> kill(res=0 )
Передача файлов ( т.е. - basefile, --transfer-file, --transfer, --return
) в GNU Parallel использует магию /./ rsync
. Поэтому, когда вы попросите передать /tmp/common.sh
, он будет помещен в /tmp/common.sh
на удаленной стороне. Но если вы попросите передать / tmp /./ common.sh
, он перенесет /tmp/common.sh
в $ (pwd) /.
.
Другими словами:
(local file) => (remote file)
dir/file => ./dir/file
/tmp/sub/dir/file => /tmp/sub/dir/file
/tmp/sub/./dir/file => ./dir/file
Вы видите ошибку, вероятно, из-за того, что / tmp является символической ссылкой в удаленной системе.
Если вы используете - workdir ...
, у вас будет новый рабочий каталог для каждого задания. Поскольку - basefile
копирует файл только перед запуском первого задания, это не сработает.
Вместо этого вы можете передать common.sh для каждого задания:
parallel --wd ... --tf {1} -S server 'pwd ; ls; echo {2}' ::: /tmp/./common.sh ::: foo bar