タグ付けされた質問 「process」

プロセスは、実行中のコンピュータプログラムのインスタンスです。

1
クリップボードのソース(アプリケーション)を知ることは可能ですか?
ソースアプリケーション(コンテンツのコピー元のアプリケーション)が閉じていると、クリップボードのコンテンツが使用できなくなることがあります。 これにより、ソースアプリケーションが何であるかを(たとえば、PIDで)知ることができるかどうか疑問に思います。 どうして?ソースアプリケーションがターミナルである場合、コピーされたコンテンツが相対パスである場合、ターミナルの作業ディレクトリを見つけて、ファイルへのフルパスを構築します。 参考までに、私は現在xclipを使用してクリップボードの内容を決定しています。たとえば、 xclip -selection primary -t STRING -o 2> /dev/null
10 x11  process  clipboard  xclip 

2
プロセスの作成時にPIDとプロセス名を出力する
ここでの質問から、OP pidofはシェルスクリプトで使用しているプロセスのPIDを繰り返しポーリングする必要があります。もちろん、これは非効率的です。pidof毎秒数回プログラムの新しいプロセスを開始する必要があるためです(これが問題のCPUスパイクの原因であることはわかりませんが、可能性が高いようです)。 通常、シェルスクリプトでこの種のことを回避する方法は、必要なデータを出力する単一のプログラムを操作しstdout、必要に応じてテキスト処理を行うことです。これには、より多くのプログラムを同時に実行する必要がありますが、ポーリングの目的で新しいプロセスが継続的に作成されないため、CPUの負荷が低くなる可能性があります。 したがって、上記の質問の1つの解決策は、プロセスの作成時にプロセスの名前とPIDを出力するプログラムを用意することです。それからあなたは次のようなことをすることができます: pids-names | grep some_program | cut -f 2 | while read pid; do process-pid "$pid" done これの問題は、それがより根本的な問題を提起することです、pidsとプロセス名はそれらが作成されたときにどのように印刷されますか? というプログラムを見つけましたps-watcherが、問題はperlスクリプトが繰り返し実行さpsれるため、実際には問題が解決しないことです。別のオプションを使用auditdすることもできます。これは、ログがを介して直接処理された場合に機能する可能性がありますtail -f。理想的な解決策は、これよりも単純で移植性が高いでしょうauditdが、最善の選択肢であれば解決策を受け入れます。

2
どうすれば殺しにくいプロセスを作成できますか
(root権限で)起動すると(管理者でも)停止しにくいプログラムを作成したい。いったん開始すると、プロセスは、停止するように要求されるまで、起動時にそれ自体を開始し続けるはずです。停止プロセスには時間がかかるはずです(つまり、コストがかかるはずです)。 これは悪意のあるソフトウェアのように聞こえるかもしれませんが、本当の理由でそれが欲しいです。自分のラップトップ(管理者)でサイトブロッカーを実行したい。そして、私がそれらを止めることを困難にしたいと思います。 私が考えた解決策は次のとおりです- プロセスは実行されるたびに異なる名前で実行する必要があるため、プロセス名を予測して強制終了することはできません。 プロセスはシャットダウン時に自身を/etc/rc5.dに保存します プロセスは、既知の場所にある暗号を使用してその名前を暗号化します。停止プロセスは、ブルートフォースを使用してプログラム名を回復し、強制終了する必要があります。 このタスクの良い解決策を見つけたいのですが。
10 security  process  kill 

2
各プロセスが現在のディレクトリを持っているとはどういう意味ですか?
私は「The Unix Programming Environment」を読んでいますが、プロセスの現在のディレクトリという概念を理解していません。 各プロセスには現在のディレクトリがあり、スラッシュで直接開始しない限り、すべてのファイル名は暗黙的にそのディレクトリの名前で始まると想定されます。 すべてのプロセスが、それが作成されたディレクトリにサインがあることを意味しますか?たとえば、プログラム/bin/sedがから呼び出された場合/home/rene、sedの呼び出しから作成されたプロセスには現在のディレクトリがあり/home/reneますか?
10 process 

1
孤立したプロセスグループでインタラクティブシェルは何をすべきですか?
(/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-groupsの提案に従ってUNIXに再投稿する) 簡単な質問は、ttyを所有していない孤立したプロセスグループ内にある場合、シェルは何をすべきかということです。しかし、面白いので、長い質問を読むことをお勧めします。 以下は、お気に入りのシェルを使用して、ラップトップをポータブルスペースヒーターに変える楽しくてエキサイティングな方法です(tcshの変人の1人でない限り)。 #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } これにより、bashはCPUを100%に固定します。zshとfishは同じことをしますが、kshとtcshはジョブ制御について何かをつぶやいてからキールします。これは少し優れていますが、それほど多くはありません。ああ、それはプラットフォームにとらわれない犯罪者です。OSXとLinuxの両方が影響を受けます。 私の(潜在的に間違っている)説明は次のとおりです:子シェルがそれがフォアグラウンドにないことを検出しました:tcgetpgrp(0) != getpgrp()。したがって、それ自体を停止しようとしますkillpg(getpgrp(), SIGTTIN)。しかし、その親(Cプログラム)がリーダーで死亡したため、そのプロセスグループは孤立SIGTTINしています。孤立したプロセスグループに送信されたものは削除されるだけです(それ以外の場合は、再び起動できません)。したがって、子シェルは停止されませんが、まだバックグラウンドにあるので、すぐにすべてが再び実行されます。すすぎ、繰り返します。 私の質問は、コマンドラインシェルがこのシナリオをどのように検出できるか、そしてそれを行うための正しいことは何ですか?私には2つの解決策がありますが、どちらも理想的ではありません。 pidがグループIDと一致するプロセスにシグナルを送ろうとします。それがで失敗する場合ESRCH、それはおそらく孤立していることを意味します。 から1バイトのノンブロッキング読み取りを試みます/dev/tty。それがで失敗する場合EIO、それはおそらく孤立していることを意味します。 (これを追跡する私たちの問題はhttps://github.com/fish-shell/fish-shell/issues/422です) あなたの考えをありがとう!


4
(プロセスではなく)コマンドのグループの概要メモリ使用量を表示する方法
top / htopのようなツールを使用するときに、同様のプロセスをグループ化する方法はありますか?ときどき、メモリを何が食べているのかを知りたいだけで、一部のプログラム(主にブラウザー)が複数のプロセスを使用しているため、実際に使用しているRAMの量を読み取るのが難しくなっています。 これまでのところ、私はそのようなものだけを思いつきました: ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc
10 process  top 

1
Linux上のPCBはどこですか
PCBまたはプロセス制御ブロックは、ウィキペディアでこのように定義されています プロセス制御ブロック(PCB、タスク制御ブロック、[1]タスク構造、またはスイッチフレームとも呼ばれます)は、特定のプロセスを管理するために必要な情報を含むオペレーティングシステムカーネルのデータ構造です。PCBは、「オペレーティングシステムでのプロセスの現れです。 そしてその義務は: Process identification data Processor state data Process control data では、プロセスのPCBはどこにありますか?
10 linux  process  cpu 

1
長時間実行プロセスのps経過時間形式について
ps演習の一部としてコマンドを使用して、特定のしきい値よりも長く実行されているプロセスを特定しています。 次のテンプレートを使用して、knowプロセスコマンドの経過時間を取得しています。 ps -eo etime,command | grep <something to identify a process> | grep -v grep | awk '{print $1}' 実行時間の短いプロセスで、etime(経過時間)の値の形式がわかり、これからプロセスの実行時間minutes:secondsを簡単に判断できます。 非常に長時間実行されるプロセス(数日)の場合、形式がわかりません。 htop126時間実行しているように見えるMySQLサーバープロセスがあります。 実行ps -eo etime,command | grep mysql | grep -v grep | awk '{print $1}'すると、の値が得られます9-03:35:32。 私の推測では、これは9何か、3時間35分32秒という意味です。9の単位がわかりません。 問題のプロセスは126時間、約5.25日実行されています。これは、上記の出力の9が日数を表していないことを示唆しています。(9 * 12)時間+ 3時間+ 35分+ 32秒は5日未満であるため、半日になることもできません。 長時間実行されているプロセスで表示される経過時間の値を解釈するにはどうすればよいですか?上記の出力で9に付随する単位は何ですか?
10 process  time  ps 

4
シンプルなキューイングシステム?
汎用のPCがある場合、それを使用してバックグラウンドで24時間体制でいくつかのタスクを実行します。 基本的に、次のようなコマンドが必要です。 add-task *insert command here* list-tasks remove-task(s) 追加されたタスクは単にキューに入れられ、バックグラウンドで次々に実行されます(シェルのログアウト後も実行を続けます)。 これを行う簡単なスクリプト/プログラムはありますか?

1
カーネルスレッドはプロセスとデーモンですか?
MauererのLinuxカーネルアーキテクチャから、 カーネルスレッドは、カーネル自体によって直接開始されるプロセスです。カーネル機能を別のプロセスに委任し、そこでシステムの他のプロセスと「並列」で(そして実際には、カーネル自体の実行と並列に)実行します。カーネルスレッドは、しばしば(カーネル)デーモンと呼ばれます。たとえば、以下のタスクを実行するために使用されます。 変更されたメモリページを、ページの作成元のブロックデバイス(たとえば、mmapを使用してマップされたファイル)と定期的に同期します。 めったに使用されないメモリページをスワップ領域に書き込むため。 遅延アクションを管理するため。 ファイルシステムのトランザクションジャーナルを実装します。 基本的に、カーネルスレッドには2つのタイプがあります。 タイプ1 —スレッドは開始され、特定のアクションを実行するようカーネルから要求されるまで待機します。 タイプ2 —開始されると、スレッドは定期的な間隔で実行され、特定のリソースの使用率をチェックし、使用率が設定された制限値を超えるか下回ったときにアクションを実行します。カーネルは、このタイプのスレッドを継続的な監視タスクに使用します。 Mauererの本には、カーネルスレッドはプロセスであると記載されているため、カーネルモードではなく、ユーザーモードで実行する必要があると思います。(または私は間違っていますか?プロセスは、ユーザーモードまたはカーネルモードのいずれかで異なる時間に実行できますか、それとも1つのモードだけで実行できますか?) しかし、BovetのLinuxカーネルの理解によると、カーネルスレッドはカーネルモードでのみ実行されます(下の引用を参照)。2冊の「カーネルスレッド」の概念は同じ概念ですか? 従来のUnixシステムは、ディスクキャッシュのフラッシュ、未使用のページの交換、ネットワーク接続のサービスなど、いくつかの重要なタスクを断続的に実行するプロセスに委任しています。実際、これらのタスクを厳密に直線的に実行することは効率的ではありません。それらの機能とエンドユーザープロセスの両方がバックグラウンドでスケジュールされていると、応答が向上します。一部のシステムプロセスはカーネルモードでのみ実行されるため、最近のオペレーティングシステムは、不要なユーザーモードコンテキストに邪魔されないカーネルスレッドに機能を委任します。Linuxでは、カーネルスレッドは次の点で通常のプロセスと異なります。 カーネルスレッドはカーネルモードでのみ実行されますが、通常のプロセスはカーネルモードとユーザーモードで交互に実行されます。 カーネルスレッドはカーネルモードでのみ実行されるため、PAGE_OFFSETより大きい線形アドレスのみを使用します。一方、通常のプロセスは、ユーザーモードまたはカーネルモードのいずれかで、4ギガバイトのリニアアドレスをすべて使用します。 Mauererの本は、カーネルスレッドはカーネルによって直接開始されると述べており、デーモンはカーネルスレッドの同義語であるとも言われているようです。したがって、デーモンはカーネルによって直接開始される必要があると思います。 しかし、https://unix.stackexchange.com/a/193918/674によると、screenデーモンはscreenユーザーインターフェイスによって起動されます(下の引用を参照)。screenユーザーインターフェースはカーネルではなくプロセスだと思います。概念であるdaemonMauererの本の中で、リンクされた回答では、同じ概念? を最初に起動するとscreen、実際にはユーザーインターフェイス(ui)が開始されます。これにより、デフォルトでデーモン(セッションマネージャー)が作成されます。 一般的に、「カーネルスレッド」、「プロセス」、および「デーモン」の概念、それらの関係および違いをどのように理解しますか?

2
LinuxでゾンビプロセスにSIGKILLを送信するとどうなりますか?
Linuxでは、子プロセスが終了し、その親がまだその上で待機していない場合、ゾンビプロセスになります。子の終了コードはpid記述子に格納されます。 a SIGKILLが子に送信された場合、何の影響もありません。 これは、終了コードがによって変更されない、SIGKILLまたは終了コードが変更されて、子がSIGKILL?

4
プロセスが実行されている特定のプロセッサーの判別
Linuxクラスターの8コアノードにアクセスできます。ノードにログインすると、次のコマンドを使用してプロセッサのリストを表示できます。 more /proc/cpuinfo 私の8コアノードでは、プロセッサの番号は0〜7です。各プロセッサはIntel Xeon CPU(E5430 @ 2.66GHz)です。 次にfoo、いくつかの引数を指定してプログラムを呼び出すとしますargs。 foo args プログラムのfoo実行に時間がかかります(たとえば、数時間または数日)。を呼び出したfoo後、実行中の特定のプロセッサ(0〜7)を特定することは可能fooですか?topプログラムショーくれプロセスIDと同様の情報が、私は、プロセッサ表示されていない番号を。そのような情報はありますか?
10 linux  process  cpu  top 

2
$ BASHPIDと$$は異なる場合があります
「オレイリーのBASHポケットガイド」を読んでいます。と言いました: 現在のBashプロセスのプロセスID。場合によっては、$$と異なる場合があります。 上記の説明では、$BASHPID変数について説明しました。 質問:どのケースですか?

2
同じパイプラインで同じファイルの読み取りと書き込みを常に「失敗」させる方法は?
次のスクリプトがあるとします。 #!/bin/bash for i in $(seq 1000) do cp /etc/passwd tmp cat tmp | head -1 | head -1 | head -1 > tmp #this is the key line cat tmp done 重要な行で、同じファイルtmpを読み書きしますが、失敗することがあります。 (パイプライン内のプロセスが並行して実行されるため競合状態が原因であると読み取りましたが、理由はわかりません-それぞれheadが前のデータからデータを取得する必要がありますか?これは私の主な質問ではありません、しかし、あなたもそれに答えることができます。) スクリプトを実行すると、約200行が出力されます。このスクリプトが常に0行を出力するように強制できる方法はありますか(そのため、I / Oリダイレクトtmpは常に最初に準備され、データは常に破棄されます)?明確にするために、このスクリプトではなく、システム設定を変更することを意味します。 あなたのアイデアをありがとう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.