यह करने के लिए सुरक्षित है, लेकिन स्वाभाविक रूप से आपने कॉपी को समाप्त नहीं किया होगा।
जब cp
कमांड चलाया जाता है, तो यह syscalls बनाता है जो कर्नेल को फ़ाइल की प्रतियां बनाने का निर्देश देता है। एक syscall एक फ़ंक्शन है जो एक एप्लिकेशन कॉल कर सकता है जो कर्नेल से एक सेवा का अनुरोध करता है, जैसे डिस्क पर डेटा पढ़ना या लिखना। यूजर्सस्पेस प्रोसेस सिसकॉल के खत्म होने का इंतजार करता है। यदि आप कॉल का पता लगाने के लिए थे, तो यह कुछ इस तरह दिखाई देगा:
open("/home/user/hello.txt", O_RDONLY) = 3
open("/mnt/hello.txt", O_CREAT|O_WRONLY, 0644) = 4
read(3, "Hello, world!\n", 131072) = 14
write(4, "Hello, world!\n", 14) = 14
close(3) = 0
close(4) = 0
यह प्रत्येक फ़ाइल के लिए दोहराता है जिसे कॉपी किया जाना है। जिस तरह से ये syscalls काम करते हैं, उसके कारण कोई भ्रष्टाचार नहीं होगा। जब इस तरह के syscalls में प्रवेश किया जाता है, तो घातक संकेत केवल तभी प्रभावी होगा जब syscall समाप्त हो गया हो , न कि जब वह चल रहा हो। इस वजह से, इस प्रक्रिया को जबरन मारने का कारण केवल इसे समाप्त करना होगा क्योंकि वर्तमान में चल रहे सिस्केल समाप्त हो गए हैं। इसका मतलब यह है कि कर्नेल, जहां फाइलसिस्टम ड्राइवर रहता है, उन ऑपरेशंस को पूरा करने के लिए स्वतंत्र है, जिन्हें फाइल सिस्टम को एक सायन अवस्था में रखने के लिए पूरा करना है। इस तरह के किसी भी I / O को ऑपरेशन के बीच में कभी भी समाप्त नहीं किया जाएगा, जिससे वे परमाणु संचालन करेंगे।
दिलचस्प बात यह है कि इस तरह कमांड्स cp
को मारने पर तुरंत समाप्त नहीं किया जा सकता है। यदि आप एक बहुत बड़ी फ़ाइल की प्रतिलिपि बना रहे हैं और इसे मारते हैं, यहां तक कि SIGKILL के साथ भी, प्रक्रिया तब भी चलेगी जब तक कि वर्तमान syscall खत्म नहीं हो जाती। एक बड़ी फ़ाइल के साथ, इसमें कुछ समय लग सकता है, क्योंकि यह प्रक्रिया अबाधित स्थिति में होगी।