LAUNCH EXTERNAL PROCESSからpidが取得できる

Go down

LAUNCH EXTERNAL PROCESSからpidが取得できる

投稿 by hosaka on 2018-05-16, 11:30 am

v16あたりからLAUNCH EXTERNAL PROCESSに新しい引数が追加されていました。
実行したプロセスIDが取得できる様です。

ですが非同期で実行した場合、正しいプロセスIDが取得できない様です。

ドキュメントを見ると、同期/非同期にかかわらずローンチしたプロセスIDが返ってくると書いてありました。
つづきに「この情報により、作成した外部プロセスとその後やりとり(例えば中止等)するのが容易になります。」と書いてあるのですが
これが必要なのは非同期の場合だと思いますが、別プロセスとして起動したプロセスIDが返ってこないと「後のやりとりは容易」ではないと思います。
同期の場合にはすでにそのプロセスは終了していますので不要です。

なんでこんな仕様なんでしょうか? Crying or Very sad

また非同期で起動したプロセスは、4Dを終了しても残っている様です。これも行儀が悪い様に思います。
avatar
hosaka

投稿数 : 130
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

Re: LAUNCH EXTERNAL PROCESSからpidが取得できる

投稿 by miyako on 2018-05-16, 11:55 am

PIDを返す点についてですが,外部プロセスにタイムアウトを設定する標準的なAPIが(特にWindowsで)用意されていないことから,苦肉の索として追加された経緯があります。

4Dは,毎晩,ナイトリービルドの無人ユニットテストを実行していますが,その中にLAUNCH EXTERNAL PROCESSに依存するものが相当数あり,ひとつでも問題があると,失敗として記録して先へ進むことができないために,外部プロセスを4D側から終了できるよう,PIDパラメーターが追加されました。

ですから,「やりとり」といっても,実際には,起動した外部プロセスが終了したのか,実行中なのかを調べ,もし実行中であれば,(強制的に)終了させることしか想定されていません。「たとえば中止・・・」というドキュメントの記述は,外部プロセスのアボートを示唆しています。

非同期モードの振る舞いですが,たとえば下記(Mac)のような使い方であれば,PIDが返されるはずです。

SET ENVIRONMENT VARIABLE("_4D_OPTION_BLOCKING_EXTERNAL_PROCESS";"false")
C_TEXT($in;$out;$err)
C_LONGINT($pid)
LAUNCH EXTERNAL PROCESS("caffeinate";$in;$out;$err;$pid)


最終編集者 miyako [ 2018-05-16, 5:30 pm ], 編集回数 1 回

miyako

投稿数 : 281
登録日 : 2016/07/05

トップに戻る Go down

Re: LAUNCH EXTERNAL PROCESSからpidが取得できる

投稿 by hosaka on 2018-05-16, 12:24 pm

Pythonの実行テストを行っていたのですがこんな感じです。なにか勘違いしているのでしょうか?
8206が返ってこないといけないはずなのですが、8212が返ってきています。

avatar
hosaka

投稿数 : 130
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

Re: LAUNCH EXTERNAL PROCESSからpidが取得できる

投稿 by hosaka on 2018-05-16, 12:45 pm

ごめんなさい。原因がわかりました。

指摘していたのは以前に起動したプロセスでした。
Macを再起動して再度試してみたところ、ちゃんとPIDが返ってきました。

2回目起動してしまった場合、ドキュメントではPIDが返ってこないと書いてあるのですが何かプロセスを立ち上げてそのPIDが返ってきていたので
勘違いしてしまった様です。
avatar
hosaka

投稿数 : 130
登録日 : 2016/07/04
所在地 : 大阪

トップに戻る Go down

Re: LAUNCH EXTERNAL PROCESSからpidが取得できる

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可