短い答え

短い答え

開始前に使用されたプロセスを割り当てる方法PIDs再起動後にプロセスに割り当てられるRHEL7?
確率はいくらですか?PID

つまり、システムの再起動後に開始されたプロセス(再起動前に使用したのと同じプロセス)にRHEL7同じプロセスを割り当てることは統計的にどの程度可能ですか?PIDPID

編集する:

例:再起動する前に、PID 544を持つデーモンAがあり、マシンが再起動され、再起動後にデーモンAが起動し、PID 544が割り当てられました。

ベストアンサー1

initシステムが決定的である場合、そのinitシステムによって開始されたデーモンは、再起動時に同じpidで始まる可能性が高くなります。なぜなら、同じコードが起動するたびに実行されるからです(たまにランダム化やfsck再表示selinuxなどがありますが)。 - )コードを起動するたびに)。

しかし、RHEL7ではsystemd非決定的です。 PID は順次割り当てられますが、systemdタスクは複数のコアで並列に実行でき、さまざまなハードウェアまたはネットワーク サービスを待つこともできます。プロセスリストの前後に何が起こるのか見てみましょう。

$ ps axo pid,command | sort -n > before
$ sudo reboot
...
$ ps axo pid,command | sort -n > after
$ comm -12 before after | grep -v \\[
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
  PID COMMAND
    1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
  745 /usr/lib/systemd/systemd-logind
  864 /usr/sbin/NetworkManager --no-daemon
$ 

[したがって、これらは同じPIDを持つ2つのプロセスです(明らかなランダムではなく、「PID eins」とラベル付きカーネルスレッドを除く)。 30回の再起動でほぼ同じ情報が記録されており、systemdこれらの再起動中にpidをランダムに指定するのに非常に便利です/usr/lib/systemd/systemd-logind

PID PERCENTAGE
733 5%
734 5%
737 15%
739 5%
743 5%
746 5%
748 5%
749 5%
752 10%
753 10%
755 5%
758 5%
760 5%
764 5%
771 5%
773 5%

サービスを開始すると、データがキャプチャされます。

[Unit]
Description=recordpidorder
After=getty.target

[Service]
Type=oneshot
ExecStart=/root/pidandboots

[Install]
WantedBy=multi-user.target

走る:

#!/bin/bash
NF=/root/sequence
[[ ! -e "$NF" ]] && echo 0 > "$NF"
CUR=$(( 1 + $(< "$NF") ))
ps haxo pid,command > "/root/pidorder$CUR"
[[ $CUR -gt 30 ]] && mv /root/pidandboots /root/pidandboots.done
echo "$CUR" > "$NF"
reboot

@rebootシステムが起動して実行されると、クローン以外のジョブが実行され、ユーザーがログインしてさまざまなコマンドを実行するなど、プロセスの生成順序がランダムに割り当てられます。これは、システム、システムで生成されたPIDの数などによって異なります。

はい。デーモンが使用されているRedHatシステムで同じPIDで表示されることは統計的に考えられますsystemd。ただし、確率は、システムが提供するハードウェアと特定のサービスによって異なります。

おすすめ記事