親プロセスから子プロセスの操作結果を取得する

ジェダイ

変数をエクスポートすることで、子プロセスで親の情報を読み取ることができることを知っています

myVariable=1
bash
echo $myVariable

exit
export myVariable=1
bash
echo $myVariable # 1

親から子プロセスで定義された変数にアクセスするにはどうすればよいですか?

bash
a=2
suspend
echo $a

マイケルホーマー

あなたはこれを行うことはできません。

新しいシェルを開始すると、それは無関係のプロセスであり、親はシェルの「内部を調べて」メモリに何があるかを確認できません(これは一種のセキュリティ境界です)。その変数は共有されず、他の誰かが見ることができる場所に公開されません。

既存の環境変数のコピーを取得しますが、それらに加えた変更は、それ自体とその子のためのものです。シェルが終了するまで「逆方向」の通信はありません。その時点で存在するのは、単一の終了コードだけです。

あなたが示したようにこれをインタラクティブに行うとき、それは話の終わりです。最善の策は、データをファイルに保存し、そのファイルをsourceから読み取ったり、親に戻したりすることです。本当にファイルを使用できない場合は、最後にそれを行うためのひどい方法がありますが、達成しようとしていることを再考することをお勧めします-これを正常に機能させることができれば素晴らしいでしょう(そして他のいくつかのシェルには共有変数があります!)、ここでは達成できません。

あなたは、非対話の一部またはすべてを実行するプログラムまたはシェルスクリプトを作っている場合はsourceevalとに述べたように、標準出力にデータをプリントアウトすると、あなたを助けるかもしれない既存の答え子シェルを終了する場合は、1バイトの情報を終了コードに戻すexit 123ことができます$?。これは親で読み取ることができます


本当に何かを移行する必要がある場合は、中間ファイルなしでインタラクティブにそれを実現するための非常に厄介なハックがあります。

$ bash
$ export a=2
$ sleep 60 & echo $!
2198
$ suspend
$ xargs -0 < /proc/2198/environ printf '%s\n' | grep '^a='
a=2
$ a=$(xargs -0 < /proc/2198/environ printf '%s\n' | grep '^a=' | cut -d= -f2-)
$ echo $a
2
$ [1]+  Done                    sleep 60

ここには重大な制限があります。特に、環境全体を制御していない場合は、環境変数値内の改行によって、たとえば、不要な値を設定するように仕向けられる可能性があります。

これaは、サブプロセスの環境に表示されるようにエクスポートしてからsleep 60、バックグラウンド(&)で、sleep出力された(echo $!)のPIDを使用してサブプロセス(ここ)を起動することで機能します内部シェルを一時停止すると、から指定されsleepプロセスの環境変数を外部から読み取ることができます(これらは/procファイルシステムで公開されています)が、nullバイトで区切られているため、xargs -0分割してprintf '%s\n'1行に1つずつ出力します。その時点で、変数の完全なリストがあり、必要な変数を選択できgrepます。オプションで、=withの後に値だけを切り取ってcut設定します。sleep(私たちは転写の終了時に見るものである、独自に終了します[1]+ Done ...)。

a子のへの変更を取得したい場合は、すべてをやり直す必要があります。子はa、親で行った変更を確認することはありません。私たちが行ったのは、別のコピーを作成することだけです。sleepプロセスの理由は、プロセスのインバウンド環境変数のみが表示され、エクスポートされた場合でもシェルの内部変数値は表示されないためです

これを実行したり、信頼したりすることはお勧めしません。使用する価値はありませんが、本当に必要な状況に陥った場合は、機能するはずです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

親プロセスから子プロセスを取得する方法

分類Dev

親プロセスから作成されたすべての子/孫プロセスのpidを取得します

分類Dev

Golangを使用して子プロセスIDから親プロセスIDを取得する

分類Dev

子プロセスから正しいプロセスIDを取得する

分類Dev

NodejsはプロセスIDから子プロセスを取得する方法

分類Dev

子プロセスから親プロセスのメモリにアクセスする

分類Dev

親プロセスからCの子にシグナルを送信する

分類Dev

子プロセスから親にメッセージを送信する

分類Dev

NodeJS子プロセスのPythonスクリプトから結果を返します

分類Dev

PHPでストアドプロシージャから複数の結果セットを取得する

分類Dev

子プロセスを作成する場合、親プロセスから子プロセスにデータをコピーする必要がありますか?

分類Dev

ノードjsの子プロセスからプロセスIDを取得する方法

分類Dev

親プロセスで子プロセスの例外をキャッチする

分類Dev

子プロセスから親に戻り値を取得するにはどうすればよいですか?

分類Dev

親から子プロセスを切り離します

分類Dev

Windowsの子プロセスから親に出力を送信できますか?

分類Dev

Javaの親型参照から子プロパティにアクセスする

分類Dev

同じ親から複数の子プロセスを作成し続ける

分類Dev

Linuxの親プロセスから子プロセスへのシグナル

分類Dev

親プロセスから子プロセスにデータを取得できません

分類Dev

子の終了を推測する親プロセスの出力は何ですか?

分類Dev

親から子プロセスのスタックトレースをプログラムでどのように取得しますか?

分類Dev

Scrapy:解析関数からのプロセス結果を続行します

分類Dev

親クラスから子クラスのプロトタイプにアクセスする

分類Dev

親プロセスを死後の子プロセスに置き換える

分類Dev

親プロセスと同じ「乱数」を生成する子プロセス

分類Dev

親プロセスとして子プロセスを実行する

分類Dev

ノードjsの子プロセスから「親」に出力画像を送信する方法は?

分類Dev

実行中のプロセスから情報を取得する

Related 関連記事

  1. 1

    親プロセスから子プロセスを取得する方法

  2. 2

    親プロセスから作成されたすべての子/孫プロセスのpidを取得します

  3. 3

    Golangを使用して子プロセスIDから親プロセスIDを取得する

  4. 4

    子プロセスから正しいプロセスIDを取得する

  5. 5

    NodejsはプロセスIDから子プロセスを取得する方法

  6. 6

    子プロセスから親プロセスのメモリにアクセスする

  7. 7

    親プロセスからCの子にシグナルを送信する

  8. 8

    子プロセスから親にメッセージを送信する

  9. 9

    NodeJS子プロセスのPythonスクリプトから結果を返します

  10. 10

    PHPでストアドプロシージャから複数の結果セットを取得する

  11. 11

    子プロセスを作成する場合、親プロセスから子プロセスにデータをコピーする必要がありますか?

  12. 12

    ノードjsの子プロセスからプロセスIDを取得する方法

  13. 13

    親プロセスで子プロセスの例外をキャッチする

  14. 14

    子プロセスから親に戻り値を取得するにはどうすればよいですか?

  15. 15

    親から子プロセスを切り離します

  16. 16

    Windowsの子プロセスから親に出力を送信できますか?

  17. 17

    Javaの親型参照から子プロパティにアクセスする

  18. 18

    同じ親から複数の子プロセスを作成し続ける

  19. 19

    Linuxの親プロセスから子プロセスへのシグナル

  20. 20

    親プロセスから子プロセスにデータを取得できません

  21. 21

    子の終了を推測する親プロセスの出力は何ですか?

  22. 22

    親から子プロセスのスタックトレースをプログラムでどのように取得しますか?

  23. 23

    Scrapy:解析関数からのプロセス結果を続行します

  24. 24

    親クラスから子クラスのプロトタイプにアクセスする

  25. 25

    親プロセスを死後の子プロセスに置き換える

  26. 26

    親プロセスと同じ「乱数」を生成する子プロセス

  27. 27

    親プロセスとして子プロセスを実行する

  28. 28

    ノードjsの子プロセスから「親」に出力画像を送信する方法は?

  29. 29

    実行中のプロセスから情報を取得する

ホットタグ

アーカイブ