apt XXX installを強制停止したあとに再インストールする方法
再度インストールするまでの手順
自作OSを作る上でqumeというエミュレーターをインストールしていたのだが、インターネットの接続が不安定だったため強制停止した。 再度インストールをしようとしたところ以下のエラーが。
$ sudo apt install qemu E: ロック /var/lib/dpkg/lock-frontend が取得できませんでした - open (11: リソースが一時的に利用できません) E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
他のプロセスがaptを使用していることが原因みたい。
まずは$ sudo apt clean
したが、同様のエラーが出てうまくいかず。
http://www.ifelse.jp/blog/ubuntu-02
今度は使用しているプロセスを特定し、killを試みる。
// プロセスの特定 $ ps aux | grep apt XXX 17428 0.0 0.0 22560 1052 pts/0 R+ 17:52 0:00 grep --color=auto apt root 18595 0.0 0.0 74076 4444 pts/0 T 3月09 0:00 sudo apt install qemu root 18599 0.0 1.0 142620 86348 pts/0 T 3月09 0:00 apt install qemu _apt 18621 0.0 0.1 90272 8792 pts/0 T 3月09 0:00 /usr/lib/apt/methods/http // プロセスをkill $ sudo kill 18595
killできてなかったのでオプション付きでやってみると無事にkillできた。
$ sudo kill -9 18595 $ ps aux | grep apt $ ps aux | grep apt XXX 17428 0.0 0.0 22560 1052 pts/0 R+ 17:52 0:00 grep --color=auto apt
再び$ sudo apt install qemu
を実行し、無事インストールが完了した。
やったことを振り返る
プロセスの特定
// プロセスの特定 $ ps aux | grep apt
$ ps auxについて
は実行中のプロセスの表示。
auxはオプションで
オプション | 詳細 |
---|---|
ps a | 自分以外のユーザーのプロセスも表示する |
ps u | ユーザー名と開始時刻を表示する |
ps x | 制御端末のないプロセスの情報も表示する |
psコマンドのその他のオプションは以下。
https://eng-entrance.com/linux-command-ps
--sort START
STARTの順に表示等は使うかも。
$ ps auxf
にするとツリー状で表示される。
それをパイプでgrepに渡した。
psで表示されたプロセスの見方。
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 225940 8700 ? Ss 3月04 2:24 /sbin/init splash root 2 0.0 0.0 0 0 ? S 3月04 0:00 [kthreadd] root 4 0.0 0.0 0 0 ? I< 3月04 0:00 [kworker/0:0H]
USER:プロセスの所有ユーザー PID:プロセス番号 %CPU:CPUの占有率 %MEM:実メモリでの占有率 VSZ:仮想分も含めた使用サイズ(Kバイト) RSS:実メモリ上の使用サイズ(Kバイト) TTY:端末名 STAT:プロセスの状態 STARTED:プロセスの開始時刻 TIME:プロセスの総実行時間 COMMAND:実行コマンド名とパス(シェル表記の場合もあり)
だいたい見たまんまの意味。 %CPUとか%MEMはパーセントが頭についてるから率のことを表してるはず。(調べてないです)
STATの状態は以下。
STAT | 状態 |
---|---|
R | 稼動中 |
S | 一時停止中 |
D | 停止不可能で一時停止 |
T | 終了処理中 |
Z | ゾンビプロセス(すでに実体は無い) |
W | 実メモリ上に無くて,スワップアウトしている |
N | nice値(プロセスの優先順位) |
特定のプロセスをkill
普通にkillしてもできなかったのは処理中だったからなので強制的にプロセスを終了した。 killのオプションはたくさんあった。
$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
上記のようにたくさんオプションがあった。 今回はSIGKILLで強制的に終了させたが、あまり正しくない方法だったのかもしれない。 これについて詳しく掘り下げるのはまた別の機会にしたい。
参考:https://www.xmisao.com/2013/11/10/linux-kill-signals.html http://d.hatena.ne.jp/aqua-nora/20101210/1291969145 https://qiita.com/shuntaro_tamura/items/4016868bda604baeac3c
終わりに
いろいろ調べていく中でわかりやすい記事があったのでいかにメモしておく。 Ctrl+Cとkill -SIGINTの違いをわかりやすく説明していた。 http://equj65.net/tech/linuxprocessgroup/