2014-12-03 4 views
6

मुझे एक बेवकूफ सवाल हो सकता है लेकिन मुझे कहीं भी ऑनलाइन जवाब नहीं मिल रहा है। लिनक्स आधारित सिस्टम में, किसी भी कमांड से पहले टर्मिनल टाइपिंग "टाइम" में वास्तविक, उपयोगकर्ता और सिस्टम समय के मामले में आदेश कितना समय लगता है। उदाहरण के लिए, वर्तमान निर्देशिका मेंविंडोज कमांड लाइन लिनक्स में "समय" के बराबर है?

time ls 

सूचियों फ़ाइलों और फ़ोल्डरों टाइपिंग तो असली, उपयोगकर्ता की मात्रा, और सिस्टम का समय है कि यह फ़ाइलों और फ़ोल्डरों की सूची पर उतर आए देता है। क्या इसके पास एक खिड़कियां बराबर है? मैं अलग-अलग एल्गोरिदम के प्रदर्शन की तुलना करने की कोशिश कर रहा हूं लेकिन काम करने के लिए लिनक्स मशीन नहीं है इसलिए मैं उम्मीद कर रहा था कि विंडोज में एक समान कमांड था।

+0

मुझे लगता है कि इस सवाल का जवाब से अधिक देखा लेकिन है कि क्या करने के लिए के रूप में वहाँ एक रास्ता सिर्फ वास्तविक समय के लिए विरोध के रूप में सिस्टम और उपयोगकर्ता समय की अलग रीडिंग मिल गया था उत्सुक था। – Code

+0

पावरशेल में आप 'माप-कमान' में पाइप कर सकते हैं लेकिन मुझे अलग-अलग समय के टूटने के बारे में पता नहीं है। 'एलएस | उपाय-कमांड ' – Matt

+0

विंडोज़ में, उपयोगकर्ता समय और कर्नेल समय के बीच अंतर करने का शायद ही कभी कारण है। यदि आप ऐसा करना चाहते हैं तो आपको शायद अपना कोड लिखना होगा। –

उत्तर

5

निम्नलिखित से परिपूर्ण है। लेकिन यह सबसे नज़दीक है जो मैं यूनिक्स time व्यवहार को अनुकरण करने के लिए आ सकता हूं। मुझे यकीन है कि इसे बहुत सुधार किया जा सकता है।

असल में मैं एक cmdlet बना रहा हूं जो एक स्क्रिप्ट ब्लॉक प्राप्त करता है, एक प्रक्रिया उत्पन्न करता है और कर्नेल, उपयोगकर्ता और समाप्त समय प्राप्त करने के लिए GetProcessTimes का उपयोग करता है।

एक बार cmdlet भरी हुई है, बस के साथ

Measure-Time -Command {your-command} [-silent]

-Silent स्विच आदेश से उत्पन्न कोई उत्पादन का मतलब यह आह्वान (अर्थात, आप केवल समय के उपायों में रुचि रखते हैं)

तो के लिए उदाहरण:

Measure-Time -Command {Get-Process;sleep -Seconds 5} -Silent 

उत्पादन उत्पन्न:

+०१२३५१६४१०६
Kernel time : 0.6084039 
User time : 0.6864044 
Elapsed  : 00:00:06.6144000 

यहाँ cmdlet है:

Add-Type -TypeDefinition @" 
using System; 
using System.Runtime.InteropServices; 

public class ProcessTime 
{ 
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] 
    public static extern bool GetProcessTimes(IntPtr handle, 
               out IntPtr creation, 
               out IntPtr exit, 
               out IntPtr kernel, 
               out IntPtr user); 
} 
"@ 

function Measure-Time 
{ 
    [CmdletBinding()] 
    param ([scriptblock] $Command, 
    [switch] $Silent = $false 
    ) 

    begin 
    { 
     $creation = 0 
     $exit = 0 
     $kernel = 0 
     $user = 0 
     $psi = new-object diagnostics.ProcessStartInfo 
     $psi.CreateNoWindow = $true 
     $psi.RedirectStandardOutput = $true 
     $psi.FileName = "powershell.exe" 
     $psi.Arguments = "-command $Command" 
     $psi.UseShellExecute = $false 
    } 
    process 
    { 
     $proc = [diagnostics.process]::start($psi) 
     $buffer = $proc.StandardOutput.ReadToEnd()  

     if (!$Silent) 
     { 
      Write-Output $buffer 
     } 
     $proc.WaitForExit() 
    } 

    end 
    { 
     $ret = [ProcessTime]::GetProcessTimes($proc.handle, 
             [ref]$creation, 
             [ref]$exit, 
             [ref]$kernel, 
             [ref]$user 
            ) 
     $kernelTime = [long]$kernel/10000000.0 
     $userTime = [long]$user/10000000.0 
     $elapsed = [datetime]::FromFileTime($exit) - [datetime]::FromFileTime($creation) 

     Write-Output "Kernel time : $kernelTime" 
     Write-Output "User time : $userTime" 
     Write-Output "Elapsed  : $elapsed" 
    } 
} 
4

मुझे SuperUser पर एक समान प्रश्न मिला जो कुछ विकल्पों को शामिल करता है। PowerShell में Measure-Command का उपयोग करने के लिए मेरा सुझाव सबसे पहले और सबसे महत्वपूर्ण है।

Measure-Command {ls} 

मेरी टिप्पणी में वाक्यविन्यास गलत हो गया।

+0

मैंने अभी कोशिश की है। ऐसा लगता है कि केवल वास्तविक समय देता है। क्या आप सिस्टम समय या उपयोगकर्ता समय प्राप्त करने के तरीके के बारे में जानते हैं? – Code

+0

टिप्पणियों में उल्लेख किया गया है, वास्तव में यह सुनिश्चित नहीं है कि इसका क्या अर्थ है। यदि आप पोस्ट की गई पोस्ट को देखते हैं तो वहां कोई स्पष्ट सहमति नहीं है, तो – Matt

+0

मुझे नहीं पता कि सिस्टम सिस्टम और उपयोगकर्ता का समय किस तरह का प्रतिनिधित्व करता है, लेकिन मुझे पता है कि वे समय देते हैं कि आदेश हार्डवेयर से स्वतंत्र होने के लिए होता है। मेरा अनुमान है कि वे सेकंड के बजाए घड़ी चक्रों की गणना करते हैं। – Code

संबंधित मुद्दे