アカウント名:
パスワード:
dodongaです。
・ wait %ジョブid か wait プロセスID で待つ ・ シグナルを飛ばさせて、trapで待つ。
1) 3つジョブがあるとして、どれが最初に終わるかがわからないと wait %jobID 方式は使えない。 つまり、今回はこの方式は意味が無い。
2) SIGCHLD はほうっておいても飛んでくるし、trap で受け取ることもできる。 が「どれが終わった」のかはどうやって…あぁ、まて。jobs の出力だと判るか?? trap で実行している function 中で新しい background job を動かしたとして、それはjob番号何番?
ふむ… 2番にはまだチャンスがありそう。
試してません。
# コマンド名 ファイル名 [ファイル名 ・・・]
wpid1=0wpid13=0wpid15=0arvc = $#
trap "kickoff1" 1trap "kickoff13" 13trap "kickoff15" 15
function kickoff11(){ if [ argc -ne 0 ] then wait $wpid1 起動関数1 $1 shift wpid1 = $!
試していない以前に、trap というか SIGNAL の意味を勘違いしていると思います。
起動関数 を外部シェルスクリプトにして置いてwrapする。 perlスクリプトが終了したらkillコマンドでSIGNALを飛ばす様にしておく。
perl に シグナル飛ばさせる関数はないでしたっけか。 perl 側に 飛ばさせるSIGNALを教えてあげて
hoge2xlsx.pl ファイル名 signal番号
とでもしとけば良い気がします。
# export wppid=$$ 忘れてましたが、要らない?
#そう言う問題ではない?;;#自信なくなってきたぉ;;
そもそも、子プロセスが終了すると SIGCHLD が飛んできますが、「どのプロセスが飛ばしてきたシグナル」なのかは見分けがつきません。何個シグナルが飛んできたのかも見分けがつきません(コンテキストスイッチが回ってくる前に子プロセスが2個終了すると、SIGCHLDからは何個子プロセスが終了したのか見分けがつかない。実際この辺に関しては Perl には結構昔から知られているバグがあって、子プロセスが終わったことを取りこぼすことがあり、またそうならないようにするためのコーディングテクニックがある)。
また、1プロセスに1個づつ、シグナル番号を割り当てられるほど、シグナルは種類がありません(POSIXで Realtime signal を全部かき集めても63個ぐらいしかなくて、ほとんどは使い道が決まっている)。自由になるのは SIGUSR1 と SIGUSR2 ぐらいなもんです。
というわけで、その方法は根源的にうまくいきません。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
ぱっと見で思いついたこと (スコア:1)
dodongaです。
・ wait %ジョブid か wait プロセスID で待つ
・ シグナルを飛ばさせて、trapで待つ。
閑話休題
どちらもNG (スコア:1)
1) 3つジョブがあるとして、どれが最初に終わるかがわからないと wait %jobID 方式は使えない。
つまり、今回はこの方式は意味が無い。
2) SIGCHLD はほうっておいても飛んでくるし、trap で受け取ることもできる。
が「どれが終わった」のかはどうやって…あぁ、まて。jobs の出力だと判るか??
trap で実行している function 中で新しい background job を動かしたとして、それはjob番号何番?
ふむ… 2番にはまだチャンスがありそう。
fjの教祖様
試してないけど(^^; (スコア:1)
dodongaです。
試してません。
# コマンド名 ファイル名 [ファイル名 ・・・]
wpid1=0
wpid13=0
wpid15=0
arvc = $#
trap "kickoff1" 1
trap "kickoff13" 13
trap "kickoff15" 15
function kickoff11()
{
if [ argc -ne 0 ] then
wait $wpid1
起動関数1 $1
shift
wpid1 = $!
閑話休題
Re: (スコア:1)
試していない以前に、trap というか SIGNAL の意味を勘違いしていると思います。
fjの教祖様
起動関数に引数でなんのシグナルを飛ばされるかを指定させる? (スコア:1)
dodongaです。
起動関数 を外部シェルスクリプトにして置いてwrapする。
perlスクリプトが終了したらkillコマンドでSIGNALを飛ばす様にしておく。
perl に シグナル飛ばさせる関数はないでしたっけか。
perl 側に 飛ばさせるSIGNALを教えてあげて
hoge2xlsx.pl ファイル名 signal番号
とでもしとけば良い気がします。
# export wppid=$$ 忘れてましたが、要らない?
#そう言う問題ではない?;;
#自信なくなってきたぉ;;
閑話休題
Re:起動関数に引数でなんのシグナルを飛ばされるかを指定させる? (スコア:1)
そもそも、子プロセスが終了すると SIGCHLD が飛んできますが、「どのプロセスが飛ばしてきたシグナル」なのかは見分けがつきません。
何個シグナルが飛んできたのかも見分けがつきません(コンテキストスイッチが回ってくる前に子プロセスが2個終了すると、SIGCHLDからは何個子プロセスが終了したのか見分けがつかない。実際この辺に関しては Perl には結構昔から知られているバグがあって、子プロセスが終わったことを取りこぼすことがあり、またそうならないようにするためのコーディングテクニックがある)。
また、1プロセスに1個づつ、シグナル番号を割り当てられるほど、シグナルは種類がありません(POSIXで Realtime signal を全部かき集めても63個ぐらいしかなくて、ほとんどは使い道が決まっている)。自由になるのは SIGUSR1 と SIGUSR2 ぐらいなもんです。
というわけで、その方法は根源的にうまくいきません。
fjの教祖様