2 pid $$を指定してプロセスの終了をリッスンします pidを持っているとしましょう。 mypid=$$ 指定されたpidでそのプロセスの終了をリッスンするために使用できるbash /システムコマンドはありますか? mypidのプロセスが存在しない場合、コマンドは単に失敗するはずです。 14 bash shell-script process proc
2 SSHがバックグラウンドプロセスを待たないのはなぜですか? ssh -tバックグラウンドジョブが完了するのを待たないのはなぜですか? 例: ssh user@example 'sleep 2 &' sshは2秒後に戻るため、これは期待どおりに機能しますが、 ssh user@example -t 'sleep 2 &' sleep終了するのを待たずにすぐに戻ります。 誰もがこの理由を説明できますか?ssh -t戻る前にすべてのバックグラウンドプロセスが完了するのを待つ方法はありますか? 私のユースケースは、でスクリプトを開始することです。ssh -tこのスクリプトは、メインスクリプトの終了後も存続する必要があるいくつかのバックグラウンドジョブを開始します。でssh -t、これは、これまでは不可能です。 13 shell ssh process background-process file-descriptors
2 どのプログラムがそれを実行したかをシェルスクリプトが知る方法はありますか? * nixの世界では、どのスクリプトがそれを実行したかについての情報をシェルスクリプトが持つ方法はありますか? 例: /path/to/script1 /path/to/script_xyz この想像上のシナリオでscript_xyzは、パス情報(/path/to/script1) または プロセスPID 実行したエンティティの 注:さまざまなソリューションとアプローチに興味がありますが、実際にこれが実際に可能になるとは思わない 13 shell-script shell process debugging
1 一部のプログラムはすぐにシェルに戻るのに、他のプログラムは実行が完了するまで戻らないのはなぜですか? 現代のオペレーティングシステムの本から、コマンドが実行されると、シェルは子プロセスを作成し、子が実行を終了するまで待機し、ユーザーからの別のコマンドを待機することを読みました。これは実際に多くのプログラムの場合ですgedit。端末は私が閉じるまでコマンドを受け取りませんgedit。しかし、Atomコードエディターを開くと、シェルはすぐに戻り、エディターが実行されていても次のコマンドを受け入れる準備ができています。ターミナルを閉じてもアトムは閉じません。これは、エディターが子プロセスとしてではなく開かれたことを意味しますか?これを可能にする基本的なメカニズムは何ですか? ランニングps au | grep atomは与える <username> 8042 0.0 0.0 15944 2264 pts/1 S+ 00:55 0:00 grep --color=auto atom 13 shell process background-process
3 何もしない名前でプロセスを開始するにはどうすればよいですか? 何もしないが、まだ実行中のプロセスを開始したい。と呼ばれるプロセスを開始し、実行するとsadhadxk、pgrep -x "sadhadxk"通常のプロセスが機能するように、PID番号が返されます。 ダミープロセスを開始する方法はありますか? 13 bash process
2 プロセス/プログラムがゾンビになる理由 スクリプトがコマンドラインから正常に実行されている場合、cronを実行した後に同じスクリプトがゾンビ状態になるのはなぜですか?また同じトラブルシューティングの方法は? 以下は実際の例です。 [root@abc ~]# ps ax | grep Z 23880 ? Zs 0:00 [checkloadadv.sh] <defunct> 23926 pts/0 S+ 0:00 grep Z [root@abc ~]# strace -p 23880 attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted [root@abc ~]# pstree | grep checkload init-+-crond---crond-+-checkloadadv.sh [root@abc ~]# bash /usr/bin/checkloadadv.sh System Load is OK : 0.05 13 process zombie-process
1 子プロセスのリストをエレガントに取得する 親が$ pidであるすべてのプロセスのリストを取得したいと思います。これは私が思いついた最も簡単な方法です: pstree -p $pid | tr "\n" " " |sed "s/[^0-9]/ /g" |sed "s/\s\s*/ /g" 子プロセスのリストを取得するコマンド、またはより簡単な方法はありますか? ありがとう! 13 process ps
4 名前だけで実行可能ファイルを実行することと、その前にドット/スラッシュを追加することの違いは何ですか? これはls -allコマンドからの出力です: -rwxr----- 1 subhrcho dba 3600 Nov 13 17:26 jdev -rw-r----- 1 subhrcho dba 1566 Nov 13 17:26 jdev-Darwin.conf -rw-r----- 1 subhrcho dba 347 Mar 6 2009 jdev-debug.boot -rw-r----- 1 subhrcho dba 821 Nov 13 17:26 jdev-logging-debug.conf -rw-r----- 1 subhrcho dba 584 Nov 13 17:26 jdev-logging.conf -rw-r----- 1 subhrcho … 13 process command
1 setuidビットがオンのルート所有プログラム Pingは、ユーザーIDビットが設定されたルートが所有するプログラムです。 $ ls -l `which ping` -rwsr-xr-x 1 root root 35752 Nov 4 2011 /bin/ping 私が理解しているように、ユーザーがpingプロセスを実行すると、実際のユーザーID(プロセスを起動した人のユーザーID)からユーザーIDルートに変わります。ただし、これを試し、psの出力を見て、pingプロセスがルートユーザーとして実行されているかどうかを確認しても、実際のユーザーIDが表示されます。 ps -e -o user,ruser,euser,cmd,args | grep ping sashan sashan sashan ping -i 10 -c 1000 www.goog ping -i 10 -c 1000 www.google.com 13 security process ping privileges setuid
3 プロセスが終了してからどれくらいの時間実行されたかを確認するには 現在、以下を使用して、プロセスが実際に実行されている時間を確認しています。 ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS' そして、それは次を出力します: MY_ID PID_OF_PROCESS 00:16 ただし、プロセスが終了した後、実際に実行された期間を調べたいのですが、その情報が見つからないようです。 13 process
1 bashのようにプロセスを中断および再開する方法 この質問はフォローアップです:プロセスを中断および再開する方法 私はgnome-terminalのbashセッションからfirefoxを起動しました。 プロセスツリーは次のようになります。 $ ps -e -o pid,ppid,cmd -H 1828 1 gnome-terminal 26677 1828 bash 27980 26677 /bin/sh /usr/lib/firefox-3.6.15/firefox 27985 27980 /bin/sh /usr/lib/firefox-3.6.15/run-mozilla.sh /usr/lib/firefox-3.6.15/firefox-bin 27989 27985 /usr/lib/firefox-3.6.15/firefox-bin 28012 27989 /usr/lib/firefox-3.6.15/plugin-container /usr/lib/adobe-flashplugin/libflashplayer.so 27989 plugin true CTRL+Zbashでヒットすると、firefoxが中断されます。コマンドbg(またはfg)を発行すると、firefoxが再開されます。これは予想どおりです。 kill -s SIGTSTP 27980別のターミナルでコマンドを発行する[1]+ Stopped firefoxと、最初のターミナルで行を印刷します(ちょうどヒットしたときのようにCTRL+Z)が、firefoxを中断しません。シェルスクリプトを一時停止するだけだと思います。 kill -s SIGTSTP 27989別の端末でコマンド(PIDに注意)を発行すると、firefoxが中断されます。最初の端末はこれに注意しません。 bashはプロセスツリー全体をどのように一時停止しますか?ツリーとすべての子をSIGTSTPだけトラバースしますか? 13 process job-control signals
3 400,000以上のPIDが表示されるのはなぜですか?何かが間違っていることを示していますか? 今日、プロセスIDが400,000(つまり449624)で非常に高いことに気付きました。実行するとps -ef | more、そのことに気づきました。それは正常ですか、それとも問題を示していますか?それ以外の場合、スクリプトは正常に実行されています。 Redhat 7.3 x64ビットを使用しています。 私が気づいたもう1つのことは、Redhat 7.2もあり、新しいOS上ではpidがそれほど高くないことです。どうしてですか?OSに関連した正常なものですか? 私はそれを持っていないkernel_pid_max私にsysctl.conf。私は猫を走った/proc/sys/kernel/pid_maxと私は見ます458752。 13 process
1 LinuxでランダムPIDを有効にする方法は? 現在、セキュリティの観点から、OpenBSD、FreeBSD、LinuxでのランダムPID実装を比較しています。 OpenBSDとFreeBSDに関する限り、私の仕事は終わりです。ただし、ここでの回答では、sysctl設定のおかげでランダムPIDをLinuxで有効にできると述べていますが、どの設定であるかを判断できませんでした。 インターネットでの研究は、主流のLinuxカーネルで拒否されたパッチと議論のみにつながり、grsecurity機能にも表示されません(そして、明らかに私のLinuxボックスでは、PIDはどこでもインクリメンタルで、sysctl関連するパラメータ名はなく、カーネルソースには関連するものは何も表示されませんでした)。 PIDのランダム化は実際にLinuxで利用可能ですか? 13 security process linux-kernel
4 なぜ多くのアカウントがあるのですか?私は唯一のユーザーです Ubuntu 12.04デスクトップシステムを実行しています。これまでのところ、いくつかのプログラムしかインストールしていません(sudo権限があります)。 システム上のユーザーのリストを確認すると、20人以上のユーザーのような長いリストが表示されます。これらのユーザーはいつ作成されましたか(例:デーモン、システム、同期、ゲーム、パルスなど)。これらは、インストールされる新しいプログラムにどのように関連しますか? システムでプログラムを実行する場合、UIDで実行する必要があります。しかし、psを実行すると、他の多くのプログラムが異なるUID(root、daemon、avahi、syslog、colordなど)で実行されています。これらのプログラムは異なるUIDでどのように開始されましたか? 13 process software-installation users accounts
1 マイナスおよびプラスサインインジョブプロセス これらのコマンドはバックグラウンドで実行されています: foo @ contoso〜$ sleep 30& foo @ contoso〜$ sleep 60& foo @ contoso〜$ sleep 90& ジョブプロセス実行後のマイナス記号とプラス記号とは何ですか? foo @ contoso〜$ jobs [1]スリープ30および [2]-ランニングスリープ60& [3] +ランニングスリープ90& 13 process job-control