İşlev geri döner, ancak komut değiştirme işlemi, arka plan işi oluşturduğunuz için engellenir, ancak yine de stdout fd'nizi açarsınız. Sadece >/dev/null
önce ekleyerek kapatın &
.
#!/bin/bash
function start {
leafpad >/dev/null &
echo $!
}
PID=$(start)
echo "PID is $PID"
İşleminizin ayrıca stdin, stdout, stderr kapalı olmasını istiyorsanız, şunu kullanın:
leafpad >/dev/null 0>&1 2>&1 &
Bu stdin (0), stdout (1) ve stderr (2) 'yi, ardından arkaplanı (&) kapatır. Ayrıca, bu akış yönlendirmeleri kullanılırken, bunların "duped" olduklarını unutma, bu, yürütme sırasına göre çoğaltılmış demektir.
1>/dev/null 2>&1
ve
2>&1 1>/dev/null
aynı değiller ! Birincisinde, / dev / null dizinine bir akışı çoğaltırsınız (ki istediğiniz budur), ikincisinde, / dev / stdout komutunu stderr öğesine kopyalar ve sonra stdout'u kapatırsınız. Böylece gönderilen herhangi bir mesaj stderr
konsolunuzda görünecektir.