Çıkmak için kullanılan komut nedir? (örneğin, Node.js işlemini sonlandırın)
Çıkmak için kullanılan komut nedir? (örneğin, Node.js işlemini sonlandırın)
Yanıtlar:
Genel process
nesnenin exit
yöntemini çağırın :
process.exit()
process.exit ([kodu])
İşlemi belirtilen ile sonlandırır
code
. Atlanırsa, çıkış 'başarı' kodunu kullanır0
.'Başarısızlık' koduyla çıkmak için:
process.exit(1);
Düğümü yürüten kabuk çıkış kodunu olarak görmelidir
1
.
exit
hiç yanıltıcı değil. Düğümün nasıl çalıştığı konusunda kafanız karıştı. Düğümü sunucunun kendisi olarak düşünün. PHP, Apache gibi bir web sunucusunda olduğu gibi, yalnızca gerektiği gibi çalıştırılmaz. Düğümün web sunucularıyla hiçbir ilgisi olması gerekmez! Yararlı şeyler yapmak için bazı yerleşik kütüphanelerle birlikte, bazı JavaScriptler için bir ana makinedir.
mod_php
Apache ile çalıştırmaya veya kullanmaya gerek yok . Eğer gerçekten de düğümde olduğu gibi FastCGI gibi daha aklı başında / standartlaşmış bir yaklaşım istiyorsanız, PHP'de bir düğümün yaptığı gibi httpd'yi yeniden uygulayabilirsiniz.
process.exit()
edilir önerilmez açıklandığı gibi, aşağıda bu cevap .
Sadece bir nota kullanarak bu process.exit([number])
olduğunu önerilen değil pratik.
Arayan
process.exit()
hala henüz Ç için operasyonlar I / dahil tamamen tamamlamadığınızı bekleyen asenkron işlemleri olsa bile hızlı mümkün olduğunca çıkmak için süreci zorlarprocess.stdout
veprocess.stderr
.Çoğu durumda,
process.exit()
açıkça arama yapmak gerekli değildir . Olay döngüsünde beklemede olan başka bir iş yoksa Node.js işlemi kendiliğinden çıkar.process.exitCode
Mülkiyet çıkış kodu ne zaman süreç sonlandığında incelikle kullanmak sürecini anlatmak için ayarlanabilir.Örneğin, aşağıdaki örnek göstermektedir kötüye arasında
process.exit()
basılı veri neden olabilir yöntemstdout
kesildi ve kaybolmuş:// This is an example of what *not* to do: if (someConditionNotMet()) { printUsageToStdout(); process.exit(1); }
Bunun sorunlu olmasının nedeni
process.stdout
, Node.js dosyasındaki yazma işlemlerinin bazen eşzamansız olması ve Node.js olay döngüsünün birden çok kenarı üzerinde gerçekleşebilmesidir. Arayanprocess.exit()
, ancak, söz konusu ek yazma önce çıkmak için zorlarstdout
yapılabilir.
process.exit()
Kod, doğrudan çağırmak yerineprocess.exitCode
, olay döngüsü için herhangi bir ek iş planlamaktan kaçınarak sürecin doğal olarak çıkmasına izin vermeli ve işlemden çıkmasına izin vermelidir:// How to properly set the exit code while letting // the process exit gracefully. if (someConditionNotMet()) { printUsageToStdout(); process.exitCode = 1; }
process.exit()
olarak amaçlanan budur .
Resmi nodejs.org belgelerinden:
process.exit(code)
İşlemi belirtilen kodla sonlandırır. Atlanırsa, çıkış 'başarı' kodunu 0 kullanır.
'Başarısızlık' koduyla çıkmak için:
process.exit(1);
code = 0; process.exit(code);
code
mu?
process.exit()
kod varsayılan olarak 0 olduğu için sadece parametresizdir
process.exit(0);
çalıştırırsanız node exit_0.js && echo 'success'
"başarılı" der. Exit_1.js ile birlikte oluşturur process.exit(1);
ve çalıştırırsanız node exit_1.js && echo 'success'
, işleminiz sıfırdan farklı bir işlemden ("kabuğa bir" başarısızlık "veya" anormal çıkış "olduğunu gösterir)" başarılı "demez. Buna ek olarak, vs'yi $?
çalıştırırsanız farklı değerler görürsünüz (yaparak ve sonra kontrol edebilirsiniz ). node exit_1.js
node exit_0.js
node exit_1.js
echo $?
Unix terminalinde veya Windows komut satırındaysanız ve Düğüm REPL'inden çıkmak istiyorsanız, ...
.exit
ve Enter tuşuna basın veyanode
de Windows üzerinde çalışır, böylece repl, çıkmak için Ctrl + D standart davranıştır.
Komut satırından .exit
istediğiniz şey:
$ node
> .exit
$
REPL belgelerinde belgelenmiştir . Düğüm komut satırının adı REPL (Read-Eval-Print-Loop).
Normal bir programdan kullanın process.exit([code])
.
Bu neden node.js işleminden çıkmak istediğinize bağlıdır, ancak her durumda dikkate alınmasıprocess.exit()
gereken son seçenek budur . Dokümanlardan bir alıntı:
Bu nota önemli olduğunu çağıran
process.exit()
hala henüz Ç için operasyonlar I / dahil tamamen tamamlamadığınızı bekleyen asenkron işlemleri olsa bile hızlı mümkün olduğunca çıkmak için süreci zorlarprocess.stdout
veprocess.stderr
.Çoğu durumda,
process.exit()
açıkça arama yapmak gerekli değildir . Olay döngüsünde beklemede olan başka bir iş yoksa Node.js işlemi kendiliğinden çıkar.process.exitCode
Mülkiyet çıkış kodu ne zaman süreç sonlandığında incelikle kullanmak sürecini anlatmak için ayarlanabilir.
Düğüm.js işleminden çıkmaya istekli olabileceğiniz ve neden kaçınmanız gerektiğinin olası nedenlerini ele alalım process.exit()
:
Komut dosyası sonuna ulaştıysa ve düğüm yorumlayıcısı çıkmazsa, bazı zaman uyumsuz işlemlerin hala beklemede olduğunu gösterir. process.exit()
Bu noktada işlemin sonlandırılmasını zorlamak yanlıştır . Betiğinizin beklenen şekilde çıkmasını neyin engellediğini anlamaya çalışmak daha iyidir . Bunu çözdüğünüzde, process.exitCode
herhangi bir sonucu arama işlemine döndürmek için kullanabilirsiniz .
Örneğin, hızlı bir uygulamayı zarif bir şekilde kapatmak istiyorsanız . Komut satırı komut dosyasından farklı olarak, ekspres uygulama sürekli olarak yeni istekleri beklemeye devam eder. process.exit()
burada kötü bir seçenek olacaktır, çünkü bu, boru hattındaki tüm istekleri kesecektir. Bazıları da idempotent olmayabilir (GÜNCELLEME, SİL). İstemci, bu isteklerin sunucu tarafında tamamlanıp tamamlanmadığını asla bilemez ve istemci ile sunucu arasındaki veri tutarsızlığının nedeni olabilir. Tek iyi çözüm, http sunucusuna yeni istekleri kabul etmeyi durdurmasını ve bekleyenlerin bitmesini beklemesini söylemektir server.close()
:
var express = require('express');
var app = express();
var server = app.listen(80);
process.on( 'SIGTERM', function () {
server.close(function () {
console.log("Finished all requests");
});
});
Hala çıkmıyorsa - bkz. Durum 1.
throw
Bir hata için her zaman daha iyidir , güzel biçimlendirilmiş yığın izleme ve hata mesajı alırsınız. Üst düzey kodlar her zaman error ( catch
) ile işlem yapıp yapamayacaklarına veya işlemin çökmesine izin verip vermeyeceğine karar verebilir . Öte yandan, process.exit(1)
sessizce süreci sonlandıracak ve bundan kurtulma şansı olmayacak. Tek "yararı" process.exit()
olabilir, işlemin sonlandırılacağından emin olabilirsiniz.
Process.exit()
çoğu uygulama için büyük bir overkill gibi görünüyor. Ben php's die () fonksiyonu eşdeğer arıyordu ... daha fazla gibi:throw new Error('die msg')
REPL (Komut Satırı)
İki kez basınctrl + c
Yazın .exit
ve enter tuşuna basın
Komut dosyaları
process.exit(code)
Bekleyen zaman uyumsuz işlem olmadığında düğüm normalde 0 koduyla çıkar .
process.exit(1)
Bir hata kodu ile çıkmak için kullanılmalıdır.Bu, düğümün zarifçe kapanmadığını ve kapanmaya zorlandığını çıkarmamıza izin verecektir.
Gibi başka çıkış kodları var
3 - Dahili JavaScript Ayrıştırma Hatası (çok nadir)
5 - v8 javascript motorunda önemli hata
9 - Geçersiz argüman
Tam liste için düğüm çıkış kodlarına bakın
İstediğim bir başvurum var:
process.exit(code)
Bir exit
olay işleyiciye bağlanmak zorunda kaldım , yoksa çağrı process.exit(code)
doğrudan eşzamansız olayları öldürdüğü için posta gönderilmez .
#!/usr/bin/nodejs
var mailer = require('nodemailer');
var transport = mailer.createTransport();
mail = {
to: 'Dave Bowman',
from: 'HAL 9000',
subject: 'Sorry Dave',
html: 'Im sorry, Dave. Im afraid I cant do <B>THAT</B>.'
}
transport.sendMail(mail);
//process.exit(1);
process.on('exit', function() { process.exit(1); });
process.exitCode
bir komut satırı aracında (Düğüm v4.3.0'da test edildi) benim için çalışmaya çalışarak geçirdim . Ama belgelendiği gibi davranamadım. Bu çok iyi bir kenarı durumda olabilirdi commander
- her ne kadar github.com/tj/commander.js/... beni meraklandırıyor. Başka birinin bu sorunu Düğüm 4 w / ile karşılaşıp karşılaşmadığından emin değilim, ancak ileride başvurmak üzere belgelenir.
process.exitCode = 1
, işlem 0 koduyla çıkar.
@Dominic'in işaret ettiği gibi, yakalanmamış bir hata atmak process.exit ([kod]) işlevini çağırmak yerine daha iyi bir uygulamadır :
process.exitCode = 1;
throw new Error("my module xx condition failed");
Çıkışa doğru
let exitCode = 1;
process.exit(exitCode)
Faydalı çıkış kodları
1 - Genel hatalar için catchall 2 - Mermi yuvalarının yanlış kullanımı (Bash belgelerine göre) 126 - Çağrılan komut çalıştırılamıyor 127 - “komut bulunamadı” 128 - Çıkmak için geçersiz argüman 128 + n - Önemli hata sinyali “n” 130 - Komut dosyası, Control-C tarafından sonlandırıldı 255 \ * - Çıkış durumu aralık dışında
Kodda , isteğe bağlı bir tam sayı process.exit([errorcode])
olduğu yerde kullanabilirsiniz [errorcode]
( 0
başarıyı belirtmek için varsayılan değerdir).
Eğer kullanıyorsanız Okuma Eval Döngü (REPL) Baskı kullanabileceğiniz Ctrl+ Dveya türünü.exit
Alternatif olarak, Windows veya Linux'ta Ctrl+ C, Ctrl+C
Mac'te komut Ctrl+ Z, Ctrl+Z
node --version
v0.10.18
Ctrl + C
Veya tuşuna iki kez basın .exit
.
>
(To exit, press ^C again or type .exit)
>
Tüm düğüm işlemlerimin Windows 10'daki Git Bash kabuğundan doğrudan ölmesini sağlayabildim taskkill -F -IM node.exe
- bu, bilgisayarımdaki tüm düğüm işlemlerini bir kerede bitiriyor. Ben de kullanabileceğimi buldum taskkill //F //IM node.exe
. Neden ikisi de emin değilim -
ve //
bu bağlamda çalışır. Bu yardımcı olur umarım!
İşlem genel nesne olduğundan, herhangi bir modülü içe aktarmanıza gerek yoktur. Aşağıdaki işlev geçerli düğüm işleminden çıkar veya öldürür.
process.exit (kod)
process.kill (process.pid)
process.abort ()
Düğüm uygulamasının çalıştığı komut satırı terminalini açın ve Ctrl + C tuşlarına basın
koddan bir düğüm js uygulamasından çıkmak istiyorsanız,
process.exit(); // graceful termination
process.exit(1); // non graceful termination
düğüm js uygulamasından çıkmak istiyorsanız yazın
process.exit(1)
kodunda
Yürütme döngüsünü işlemi durdurmaya zorlamak istiyorsanız , EventEmitter örneği olan genel değişken işlemini kullanabilirsiniz . Yani process.exit () öğesini çağırdığınızda , hala senkronize olmayan işlemler yapılmasa bile tüm görevleri derhal sona erdiren exit olayını yayarsınız .
process.exit () parametre olarak bir çıkış kodu (Tamsayı ) alır. 0 kodu varsayılan değerdir ve bu da 'başarılı' olarak çıktığı anlamına gelir. Kod 1 'hata' ile çıktığı anlamına gelir.
Windows'daysanız, Görev Yöneticisi'ne gidin, ardından İşlemler'e gidin, "düğüm" adlı bir işlemi arayın, ardından farenizin sağ düğmesiyle tıklayın ve ardından "İşlemi Sonlandır" seçeneğini tıklayın.
Sen kullanabilir process.exit ([code]) fonksiyonu.
'Başarısız' olmadan çıkmak istiyorsanız kodu kullanırsınız 0
:
process.exit(0);
'Başarısızlık' koduyla çıkmak için 1
şunları yapabilirsiniz:
process.exit(1);
Hatanın 'hata' kodu uygulamaya özgüdür. Böylece kendi sözleşmelerinizi kullanabilirsiniz.
end()
zamanda talebi de yapmalısınız . Aksi takdirde sadece asılır.