Mengapa saya tidak bisa melihat pekerjaan "wget" ketika saya menjalankannya di latar belakang?

8

Saya menggunakan wgetperintah di latar belakang seperti ini

wget -bq

dan itu mencetak

Berlanjut di latar belakang, pid 31754.

Tetapi ketika saya mengetik perintah jobs, saya tidak melihat pekerjaan saya (walaupun pengunduhan belum selesai).

floyd
sumber
2
Anda dapat melihatnya denganps -p 31754
pLumo
Jjobshanya bekerja untuk kontrol pekerjaan shell (ini) (yaitu &penjelasan, ctrl-z atau bgcommamd). Daftar proses umum ( ps -aakan menunjukkannya)
eckes

Jawaban:

19

Saat menggunakan wgetdengan -batau --backgroundmenempatkan dirinya ke latar belakang dengan melepaskan dari shell saat ini ( dengan mengorbankan proses anak dan mengakhiri orangtua ). Karena itu bukan shell yang menempatkannya di latar belakang sebagai pekerjaan yang tidak sinkron, itu tidak akan muncul sebagai pekerjaan ketika Anda menggunakannya jobs.

Untuk menjalankan wgetpekerjaan asinkron (latar belakang) di shell, gunakan

wget ... URL &

Jika Anda melakukan ini, Anda mungkin juga ingin mengarahkan output ke beberapa file (yang wgettidak otomatis dengan -b), atau membuangnya dengan mengarahkan ulang ke /dev/null, atau menggunakan -qatau --quiet.

Kusalananda
sumber
1
itu
bercabang
@ user2497 Ya, lihat jawaban yang diperbarui.
Kusalananda
6

Karena itu menempatkan diri di latar belakang. Gunakan &untuk memberitahu bash untuk meletakkannya di latar belakang, dan untuk memasukkannya ke dalam daftar pekerjaan bash.

Latar belakang dan daftar kontrol pekerjaan tidak sama. Bash menempatkan semua proses latar belakangnya ke dalam daftar kontrol pekerjaannya (secara default), tetapi proses dapat dilatar belakangi tanpa dimasukkan ke dalam daftar. Hanya bash yang dapat memasukkan pekerjaan dalam daftar.

Mungkin ada keuntungan dari -bgopsi ini (saya tidak tahu apa). Misalnya sshopsi latar belakang, letakkan di latar belakang setelah meminta kata sandi.

ctrl-alt-delor
sumber
3
Ini -bq, yaitu -bdan -q, tidak -bg.
Kusalananda
2

Proses dengan pid 31754 ada; jika Anda mengetik ps -e |grep 31754 tetapi karena itu bukan pekerjaan yang dapat dipindahkan ke latar depan lagi, itu tidak ditampilkan oleh perintah pekerjaan. wget -bqsecara otomatis mengirim output ke latar belakang tanpa opsi untuk memindahkannya ke latar depan lagi.

Dasel
sumber
psmemiliki -popsi yang dapat digunakan untuk permintaan PID tertentu, atau yang dapat digunakan pgrep wget.
Kusalananda
0

Saya biasanya menggunakan tail wget-loguntuk melihat beberapa baris terakhir dari log sehingga memberi saya gambaran tentang status unduhan.

cooljay
sumber