バックアップスクリプトを実行するときは、まずルートに切り替えてtruecryptパーティションをマウントしてからスクリプトを実行します。
rootとしてtruecryptを実行した後、rootセッションを終了でき、truecryptは開いていることを確認しました。
なぜこれが起こるのですか?ルートセッションを閉じたらすぐに閉じる必要はありませんか?
コマンドの順序は次のとおりです。
su
truecrypt &
TruecryptのUIを使用して隠しボリュームをマウントしました。
./Backup.sh
次に一般的な手順は、Truecrypt ボリュームをアンマウントし、Truecrypt をオフにしてルートセッションを終了することです。ただし、root セッションを閉じると、Truecrypt は root 権限で実行され続けます。
ベストアンサー1
バックグラウンドプロセスの取得アップグレードされたバージョン親プロセス(通常Linuxで)init
PID 1
。
明らかに&はバックグラウンドで実行することです。問題は、ルートが開始されたがルートが有効になっていない場合、ルートが実行され続けるのはなぜですか?
root
システムの実行中にアクティブになります。 (root
良いこれ根。 )
root
とにかく、これはユーザー自身とは何の関係もありません。開始するプロセスは端末(または同様のもの)に依存しないため、親プロセスを終了しても子プロセスは終了しません。一時的に孤児になった後に養子縁組されることが多いですinit
。
多くのプロセスが別のアカウントで実行されています。たとえば、次のようになります。
ps aux | awk 'NR>1{print $1}' | sort -u
これを説明するために別のアカウントを使用できますtestuser
。
sleeplong
:
#!/bin/sh
sleep 9999
保存してcmod +x sleeplong
。操作testuser
:
user@host $ su testuser
testuser@host $ ./sleeplong &
[1] 9692
PIDで開くtop
:
user@host $ pids="$(pstree -cpsa 9692 | \
sed 's/ *[^,]*,\([0-9]*\).*/\1/' | tr '\n' ',')"; \
top -w 90 -p ${pids}1
入力V受信ツリー
PID USER TIME+ COMMAND
1 root 0:01.03 init
19787 user 95:30.58 `- terminal
8835 user 0:00.16 `- bash
9634 testuser 0:00.04 `- su
9642 testuser 0:00.09 `- bash
9692 testuser 0:00.00 `- sleeplong
9693 testuser 0:00.00 `- sleep
出口:
testuser@host $ exit
最上位ルーチンを再実行します。
PID USER TIME+ COMMAND
1 root 0:01.03 init
9692 testuser 0:00.00 `- sleeplong
9693 testuser 0:00.00 `- sleep
次のようにして、これをさらに視覚化できます。
スクリプトを展開して、次の操作を行います。
#!/bin/sh sleep 8888 & sleep 9999 ecode=$? printf "Bye\n" exit $ecode
実行してください
./sleeplong2 &
(su
または実行しないでください)。top
上記と同じルーチンで開始して入力すると、パラメーターcが表示されます。他の端末では:
kill NNN # Where NNN=PID of sleep 8888 kill NNN # Where NNN=PID of sleep 9999
最終的な終了コードはkill
通常143
。それは
128 + 15 = 143
デフォルトkill
は15またはですSIGTERM
。
もう一度試すもう1つの方法は、sleep
実行中のbash(または同様のもの)を終了することです。
たとえば、次のようにすることもできません。
$ su testuser -c './sleeplong &'
もっと明確になってほしいです。