একটি শিশু প্রক্রিয়া "বিচ্ছিন্ন" করা সম্ভব?


10

লিনাক্স (ফেডোরা 23) এর অধীনে ইমাক্স 24.5.1 এর মধ্যে ফায়ারফক্সে লিঙ্কগুলি খুলতে browse-url/ ব্যবহার করতে / ব্যবহার করি browse-url-firefoxযা সংক্ষেপে firefoxURL দ্বারা সম্পাদনযোগ্যকে কার্যকর করে start-process। যদি ইতিমধ্যে কোনও ফায়ারফক্স ইনস্ট্যান্স চলমান থাকে, এর ফলে ইউআরএল একটি নতুন ট্যাবে খোলা হবে এবং firefoxইমাস থেকে প্রবাহিত এক্সিকিউটেবলের সমাপ্তি ঘটবে, তবে অন্যথায় একটি নতুন ফায়ারফক্স উদাহরণ ইমা্যাকসের প্রসেস চাইল্ড হিসাবে চলবে (পরীক্ষার উদ্দেশ্যে) , এটি সমান M-! sleep 1h & RET)।

আমি যদি তখন ইমাসকে প্রস্থান করতে চাই, তবে এটি আমাকে জিজ্ঞাসা করে "সক্রিয় প্রক্রিয়াগুলি বিদ্যমান; তাদের মেরে ফেলুন এবং যাই হোক প্রস্থান করুন?" ফায়ারফক্স উদাহরণটি হত্যার বিকল্পের সাহায্যে বা ভাল, ইমাকগুলি চালিত ছেড়ে দিন। পরিবর্তে আমি firefoxইমাস প্যারেন্টের কাছ থেকে প্রক্রিয়াটি "বিচ্ছিন্ন" করতে চাই যাতে ফায়ারফক্সের দৃষ্টান্তটি চালিয়ে গিয়ে আমি ইম্যাকস থেকে বেরিয়ে আসতে পারি।

ইমাস থেকে প্রসেসগুলি স্প্যাম করা সম্ভব যা ইমা্যাকগুলি থেকে বেরিয়ে আসে "বাঁচে", বা ইমাক্স প্রস্থান করলে সমস্ত স্পসড প্রক্রিয়া মারা যেতে হবে?


আপনি কি কোনও সুযোগেই উইন্ডোজ মেশিনে ইম্যাক্স চালাচ্ছেন? - এটি একটি সমস্যা আমি 2 সম্পর্কে থেকে বছর পূর্বে উত্তর কখনো পেয়েছিলাম অনুরূপ শোনাচ্ছে subprocess হত্যা ছাড়া এ গিয়ে Emacs থেকে একটি প্রক্রিয়া কীভাবে মোছা যাবে : stackoverflow.com/q/19747637/2112489 উপর ওএসএক্স, উদাহরণস্বরূপ, আচরণ ভিন্ন - যেমন, আমি start-process(পিডিএফ দর্শকের মতো) দিয়ে একটি বাহ্যিক অ্যাপ্লিকেশন খুলতে পারি এবং ইমাকরা মনে করে যে এর কাজ শেষ হয়েছে।
আইনজীবি

না, আমি লিনাক্স ব্যবহার করছি (ফেডোরা 23) আমি প্রতিফলিত করতে প্রশ্ন সংশোধন করব।
টিম ল্যান্ডস্কিডে

উত্তর:


3

এখানে সমাধান, @ Abo-abo এর উত্তর সংক্ষেপে।

(cond
     ((string-equal system-type "windows-nt") ; Windows
      // ...
      )
     ((string-equal system-type "gnu/linux")
      (start-process "my-browse"
                     nil "setsid"
                     "firefox"
                     (concat "file://" buffer-file-name ))

      ;; (browse-url ξurl)
      )
     ((string-equal system-type "darwin") ; Mac
                // ...
                ))

নোট করুন যে শর্তটি প্রয়োজনীয়, কারণ ম্যাকের সেটসিড নেই।


1

এখানে একটি আদেশ রয়েছে যা আপনি যা চান তা করে:

(defun ora-dired-start-process (cmd &optional file-list)
  (interactive
   (let ((files (dired-get-marked-files
                 t current-prefix-arg)))
     (list
      (unless (eq system-type 'windows-nt)
        (dired-read-shell-command "& on %s: "
                                  current-prefix-arg files))
      files)))
  (if (eq system-type 'windows-nt)
      (dolist (file file-list)
        (w32-shell-execute "open" (expand-file-name file)))
    (let (list-switch)
      (start-process
       cmd nil shell-file-name
       shell-command-switch
       (format
        "nohup 1>/dev/null 2>/dev/null %s \"%s\""
        (if (and (> (length file-list) 1)
                 (setq list-switch
                       (cadr (assoc cmd ora-dired-filelist-cmd))))
            (format "%s %s" cmd list-switch)
          cmd)
        (mapconcat #'expand-file-name file-list "\" \""))))))

(define-key dired-mode-map "r" 'ora-dired-start-process)

এখানে মূল জিনিসটি ব্যবহার করা nohup

উত্সটি এখানে দেখুন


ধন্যবাদ! nohupএকটি দুর্দান্ত সমাধান। দুর্ভাগ্যক্রমে আমি কীভাবে লক্ষ্য অর্জন করতে পারি তার জন্য কেউ আপনার উত্তরটিও "বিরক্তিকর" বলে মনে করি। আপনি কি দয়া করে উত্সটি এমন কিছুতে ছাঁটাতে পারেন (shell-command "nohup sleep 1h &")এবং একটি স্পষ্ট নোট যোগ করতে পারেন যে একটি বিদ্যমান প্রক্রিয়া থেকে "বিযুক্তকরণ" সম্ভব নয় যাতে আমি উত্তরটি গ্রহণ করতে পারি?
টিম ল্যান্ডস্কিডে

আমাকে বলা হয়েছিল 'সেহসিড' 'নোহুপ' এর চেয়ে ভাল।
ইয়ংফ্রোগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.