Çı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 processnesnenin exityö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.
exithiç 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_phpApache 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.stdoutveprocess.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.exitCodeMü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öntemstdoutkesildi 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 zorlarstdoutyapı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);
codemu?
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.jsnode exit_0.jsnode exit_1.jsecho $?
Unix terminalinde veya Windows komut satırındaysanız ve Düğüm REPL'inden çıkmak istiyorsanız, ...
.exitve Enter tuşuna basın veyanodede Windows üzerinde çalışır, böylece repl, çıkmak için Ctrl + D standart davranıştır.
Komut satırından .exitistediğ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.stdoutveprocess.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.exitCodeMü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.exitCodeherhangi 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.
throwBir 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 .exitve 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 exitolay 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.exitCodebir 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]( 0baş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 + CVeya 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.